rs没有关闭,可能导致数据表被锁住,第二次访问要等待第一次的访问释放资源。 try{
con = DriverManager.getConnection(sConnStr);
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}catch(SQLException error){
System.err.println("执行executeSQL出错:"+error.getMessage());
}finally{
rs.close();
}
con = DriverManager.getConnection(sConnStr);
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}catch(SQLException error){
System.err.println("执行executeSQL出错:"+error.getMessage());
}finally{
rs.close();
}
解决方案 »
- 求shop++的oracle.sql脚本 谢谢
- JBOSS启动在MYECLIPSE下为什么无从控制台输出?
- 一个关于static关键字的问题
- hibernate 修改数据时,修改前的值与修改中的值的比较
- 我是一个新手
- jbpm3.12 一个问题
- oracle中long数据插入过长。
- 使用axis作WebService,在用log4j记录日志的时候,遇到了一些问题。
- 哪里有《hibernate in action》的中文翻译啊
- 请教有关struts的一个关于options标记的问题
- 999下拉列表选择值后立刻触发动作,怎么弄 <select name="Pt_Top" value=<%=row.Pt_Id%>>
- 我现在启动TOMCAT 出现的界面和以前不一样了 是怎么回事?
而且我把ResultSet rs = null;声明成函数内部的局部变量也不行,就是在public ResultSet executeSQL(String sql){ 的下面声明
是2码事。就好像一个东西弄丢了和他在这个世界消失了有所不同。
这个结果集要等jvm垃圾回收的时候才会被关闭,但是你不知道jvm什么时候进行垃圾回收。
rs.close(); //关闭结果集连接
rs=null; //结果集置空
con.close(); //关闭数据库连接
}
谢谢
ResultSet rs2;rs1 = stmt.executeQuery(sql);
rs2=rs1其中rs2需不需要close?不过close好像也不会出错吧??
ResultSet.CONCUR_UPDATABLE这种查询会在记录级或表级上加锁,相当于select * from user for update又一个线程也想
select * from user for update
数据库就不干了,所以就会停在这里,只有等第一个线程执行完后
或commit结束了它的事物,第二个线程才能继续执行下去