日期:2014-05-20  浏览次数:20525 次

JSP更新数据库出错,错在哪?
配置:tomcat   5.0.23,sqlserver2000,win2000
程序如下:
1、 <%@   page   contentType= "text/html;   charset=utf-8 "   language= "java "   import= "java.sql.* "%>
2、 <%@   page   import= "com.Condata "%>
3、 <%@   page   import= "java.util.Date "%>
4、 <%Condata   con=new   Condata();
5、Connection   conn=con.getConnection();
6、String   gxid= " ",gxname= " ";
7、int   ibt1=Integer.parseInt(request.getParameter( "ibt1 "));//在40至100间
8、int   ret=0;
9、for(int   ibt=1;ibt <ibt1;ibt++){
10、gxid=request.getParameter( "gxid "+ibt);
11、gxname=request.getParameter( "gxname "+ibt);
12、ret=0;
13、ret=con.executeUpdate( "update   "+session.getAttribute( "company ")+ "_rsjijian   set   gxname= ' "+gxname+ " '     where   rtrim(gxid)= ' "+gxid+ " ' ");//符合条件的记录约有10几条
14、if(ret==0){
15、out.println( " <script   Language= 'javascript '> alert( '(2)数据有误!修改失败,请重试 ');window.history.back(-1); </script> ");
16、return;
17、}
18、}
19、。。。//略

错误为当循环ibt到某个数时(每次都不同),就无法更新。
单个的update试过无问题。
请各位给找找原因。谢谢

------解决方案--------------------
你在Update之后,为什么不提交,有没有可能是因为数据库事务造成的。再更新同一个表的时候,有没有可能执行的SQL语句锁定同一行?但是没有提交,形成死锁?
------解决方案--------------------
这个问题和列表更新问题类似,看看你的列表中的表单:
gxidi和gxnamei的命名格式是否正确

实在不行的话,在每次执行update之前
打印:update "+session.getAttribute( "company ")+ "_rsjijian set gxname= ' "+gxname+ " ' where rtrim(gxid)= ' "+gxid+ " ' "
然后把打印出来的字符串逐个在数据库中执行,看看是否都能执行成功
------解决方案--------------------
你提交过来的条件会不会含有单引号?
set gxname= ' "+gxname+ " ' where rtrim(gxid)= ' "+gxid+ " ' ");
改成下边吧:
set gxname= ' "+gxname.replaceAll( " ' ", " ' ' ")+ " ' where rtrim(gxid)= ' "+gxid.replaceAll( " ' ", " ' ' ")+ " ' ");
最好是用PreparedStatement

另外,if(ret==0){满足条件的时候,最后break吧,return会不会有问题?