配置: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试过无问题。
请各位给找找原因。谢谢

解决方案 »

  1.   

    你在Update之后,为什么不提交,有没有可能是因为数据库事务造成的。再更新同一个表的时候,有没有可能执行的SQL语句锁定同一行?但是没有提交,形成死锁?
      

  2.   

    加上conn.commit();以后问题依旧,
      

  3.   

    这个问题和列表更新问题类似,看看你的列表中的表单:
    gxidi和gxnamei的命名格式是否正确实在不行的话,在每次执行update之前
    打印:update "+session.getAttribute("company")+"_rsjijian set gxname='"+gxname+"'  where rtrim(gxid)='"+gxid+"'"
    然后把打印出来的字符串逐个在数据库中执行,看看是否都能执行成功
      

  4.   

    回复kingdom_seu() :
    1。gxidi和gxnamei的命名格式是正确的
    2。单个的update试过无问题
    3。问题我觉得还是出在循环上,因我每次都out.println(ibt),而每次出现停止的ibt都不一样,有可能是比较的数,也有可能是比较大的数。
    是否我的语句效率太低导致系统处理不过来?
    谢谢
      

  5.   

    你提交过来的条件会不会含有单引号?
    set gxname='"+gxname+"'  where rtrim(gxid)='"+gxid+"'");
    改成下边吧:
    set gxname='"+gxname.replaceAll("'","''")+"'  where rtrim(gxid)='"+gxid.replaceAll("'","''")+"'");
    最好是用PreparedStatement另外,if(ret==0){满足条件的时候,最后break吧,return会不会有问题?
      

  6.   

    可能我的故障描述不太清楚:
    1、提交的内容没变
    2、出现停止的位置不确定,有点像随机率
    3、把update的值改为固定值也还是错
    谢谢