大家好,我在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();
代码如下: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();
我估计是你的statnew在where里没有close
造成open了太多的cursor引起的
你先把查出的结果先放到list 里去。然后把 result 和 stat 等资源释放。
再通过遍历list 进行update 。
放在whilt(){}conn.commit();
循环的最外边,
应该是这样的
你可以考虑:
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();