大家好,我在ECLIPSE下面用mssqlserver等三个包连接sqlserver2000,其中有个操作是读取大量数据到resultset里,然后逐条进行修改。但问题是当我的程序进行到修改的语句时,就走不动了。这时使用SQLSERVER的查询分析器也不能执行SQL语句,只有当释放后,才可以。不知道是什么原因?是连接被占用么?可我同事就可以呀,请教了!
代码如下:Statement stat = conn.createStatement();
Statement statnew;


ResultSet result = stat.executeQuery(sql);
conn.commit();
while (result.next()) {

String companyid=result.getString("company_id");

String text=result.getString("news_body");
long id=result.getLong("news_id");
float sentiment=GetTextScore(text);

String updatesql="update NEWS_INFO_COMPREHENSIVE set sentiment="+sentiment+" where news_id='"+id+"'";
statnew=conn.createStatement();
statnew.executeUpdate(updatesql); conn.commit();

解决方案 »

  1.   

    代码没贴全,
    我估计是你的statnew在where里没有close
    造成open了太多的cursor引起的
      

  2.   

    你的代码没帖全。 不过有个方法可定可以
    你先把查出的结果先放到list 里去。然后把 result 和 stat 等资源释放。
    再通过遍历list 进行update 。
      

  3.   

    如果你觉得我上面的方法有点效率,你把 conn.commit();  这个去了
    放在whilt(){}conn.commit(); 
    循环的最外边,
    应该是这样的 
      

  4.   

    晕上面的字都打丢了 如果你觉得我上面的方法有点 不 效率
    你可以考虑:
    ResultSet result = stat.executeQuery(sql); 
    conn.commit(); ///////////////////////去了
    while (result.next()) { String companyid=result.getString("company_id"); String text=result.getString("news_body"); 
    long id=result.getLong("news_id"); 
    float sentiment=GetTextScore(text); String updatesql="update NEWS_INFO_COMPREHENSIVE set sentiment="+sentiment+" where news_id='"+id+"'"; 
    statnew=conn.createStatement(); 
    statnew.executeUpdate(updatesql); 
    conn.commit();/////////////////////////去了
    }
    ///加在这个地方
    conn.commit();