在JSP中的SQL语句的问题!!!太奇怪了!!

yangmowei 2006-05-19 03:32:46
今天在用JSP开发系统时,遇到了很奇怪的几个问题,如下:

在查询分析器中执行的结果:

1. select * from housetype where buildingnumber = 'tehu5' and housetype = '户型1'
数据库中明明有tehu5和户型1这样的记录,可是就是查不出来!必须把后面的改为 like '%户型1%'才可以。

2. select * from housetype where housetype = '户型2'
这句查出来,本来数据库中是有3条符合条件的数据,但只能查出两条。如果后面是查'户型1',本来应该有两条,但一条也查不出来。

下面这个是在JSP页面中遇到的:

3. 在程序JSP页面中,要执行一条update语句,如下:

String RS = conn.executeUpdate("update housetype set description = '" + b_description + "' , area = '" + b_area + "' , amount = '" + b_amount + "' , picture = '" + fileFullPath + "' where buildingnumber = '" + b_buildingNumber + "' and housetype like '" + b_houseType + "' ");

结果显示是执行成功的,即RS为null(这是我自己写的一个类,executeUpdate方法返回的是错误语句,如果成功执行,返回值为null,否则返回Error Text)。可是数据库中的数据根本就没有更新。在执行的同时,我把这个语句用out.write()打印出来,原封不动地复制到查询分析器中,就可以成功了。
而且在上面这个语句中,最后那个housetype必须得用like,而不能用=。(用like之前已经把原来的字符串前后加上%)
注明:以上这条,是在一个上传文件的JSP页面里写的。使用的是SmartUpload。不知道和这个有没有关系?

请大家帮我看看,这是为什么呢?谢谢啦!!!
...全文
1038 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangmowei 2006-05-23
  • 打赏
  • 举报
回复
还是结帖吧~虽然问题到目前还没有解决,但非常感谢大家的热心帮助!!!^_^
feifeizaizhe 2006-05-22
  • 打赏
  • 举报
回复
字段类型问题。
yangmowei 2006-05-20
  • 打赏
  • 举报
回复
我目前已经发现问题了,就是数据库的编码问题.因为我的where条件后面的housetype是包含中文的,所以找不到这个记录,也无法update.我把它换成英文的就可以了.可是同样的语句,放在另外一个页面中就可以正常插入,中文也正常.我想知道到底是不是这个SmartUpload的类出的问题呢?大家有没有遇到过用这个类的时候出乱码问题呢?
qczl1224 2006-05-20
  • 打赏
  • 举报
回复
高手太多了 把我要说的都说了。。。。。。。。。。。。。
slawdan 2006-05-20
  • 打赏
  • 举报
回复
楼主的字段都是nvarchar的,数据库中用utf8存储

你的页面的字符集和提交的所有的数据最好都转成utf8的~

JSP里最头疼的字符集问题哟~~~
ldjava 2006-05-20
  • 打赏
  • 举报
回复
可能sql语句有问题,昨天我也是遇到这样的问题
ldjava 2006-05-20
  • 打赏
  • 举报
回复
老兄在没
  • 打赏
  • 举报
回复
UTF8,ISO,GB2312的转码问题
ZJQ100 2006-05-20
  • 打赏
  • 举报
回复
=与like有什么区别?
DiligencyMan 2006-05-20
  • 打赏
  • 举报
回复
不错高手都说完了,我还说什么呢?
  • 打赏
  • 举报
回复
N(field)
xylwqwtd 2006-05-19
  • 打赏
  • 举报
回复
楼上好多东西楼主可以仔细看看,我也觉得是数据库问题
<%@ page=……%><%@ page=……%>
或者都在一个<%@ page=……%>
什么意思?
yehoohaha 2006-05-19
  • 打赏
  • 举报
回复
是不是要将传递过来的数据格式化一下
public String codeToString(String str)
{//处理中文字符串的函数
String s=str;
try
{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}
catch(Exception e)
{
return s;
}
}

列如:String number=codeToString(request.getParameter("number"));
CodeVitamin 2006-05-19
  • 打赏
  • 举报
回复
executeUpdate使用后应该关闭连接,这样才能执行成功,请先确定你是否关闭了
SinBen 2006-05-19
  • 打赏
  • 举报
回复
trim()函数写在SQL里面,例如 orcale 中

select * from tablename where trim(columnname) = 'value'

表示将Database中的资料trim()完再比较

如果你确定value不带空格,应该用上述方式就可以找到匹配的了

SQL Server 的trim()用法忘记了。

如果不行就可能是编码问题了
wangbin19830731 2006-05-19
  • 打赏
  • 举报
回复
你得数据类型可能是char型而不是varchar类型,数据后面自动补充了空格了
所以select不出来
yangmowei 2006-05-19
  • 打赏
  • 举报
回复
我已经把'去掉试过了,也不行。要加的语句在查询分析器里是可以正常执行的啊。

我没有用到事务,应该不用提交吧?以前写的所有的页面都是直接执行SQL语句的啊。
sole_lodestar 2006-05-19
  • 打赏
  • 举报
回复
楼主没有改变jdbc中自动commit吧?
lovevirus 2006-05-19
  • 打赏
  • 举报
回复
看看有没有提交事务呢
xingfo 2006-05-19
  • 打赏
  • 举报
回复
不要对area,amount的数据加''号,还有就是你把你要加的语句在SQL查询分析器中执行一遍看是不是数据有没有违反你的约束,在没有问题的前提下,你再考虑你的执行代码有没有问题.
加载更多回复(27)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧