ResultSet temprs=sqlBeanId.executeQuery(sql);
while(temprs.next())
{ String unitID=temprs.getString("unit_ID");
String tempsql="insert into TempUnit(unit_ID) values ('"+unitID+"')";
sqlBeanId.executeInsert(tempsql);
stmt.close();
conn.close();
}
temprs.close();
stmt.close();
conn.close();内嵌式的对数据库操作时,stmt和conn应什么时候、如何关闭?
我这样写有问题吗?是否会导致资源泄漏?
bean里面有类:
//数据查询、更新
public ResultSet executeQuery(String sql){
rs=null;
try{conn=DriverManager.getConnection(SDBUrl,User,PW);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql); }
catch(SQLException ex){ System.err.println("ExectueQuery():"+ex.getMessage()); }
return rs;
}
//数据插入
public void executeInsert(String sql){
try{conn=DriverManager.getConnection(SDBUrl,User,PW);
stmt=conn.createStatement();
stmt.executeUpdate(sql); }
catch(SQLException ex){ System.err.println("ExectueUpdate():"+ex.getMessage()); }
}
while(temprs.next())
{ String unitID=temprs.getString("unit_ID");
String tempsql="insert into TempUnit(unit_ID) values ('"+unitID+"')";
sqlBeanId.executeInsert(tempsql);
stmt.close();
conn.close();
}
temprs.close();
stmt.close();
conn.close();内嵌式的对数据库操作时,stmt和conn应什么时候、如何关闭?
我这样写有问题吗?是否会导致资源泄漏?
bean里面有类:
//数据查询、更新
public ResultSet executeQuery(String sql){
rs=null;
try{conn=DriverManager.getConnection(SDBUrl,User,PW);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql); }
catch(SQLException ex){ System.err.println("ExectueQuery():"+ex.getMessage()); }
return rs;
}
//数据插入
public void executeInsert(String sql){
try{conn=DriverManager.getConnection(SDBUrl,User,PW);
stmt=conn.createStatement();
stmt.executeUpdate(sql); }
catch(SQLException ex){ System.err.println("ExectueUpdate():"+ex.getMessage()); }
}
而stm 则可以不用关闭
resultset 则是用完一次 就关闭
你的查询方法就创建了一个conn,这个对象一直存在
然后又是循环插入 每次又创建了一个conn 这样是不是浪费呢?为什么不从另外一个方法获得连接conn 然后把这参数传入查询和插入方法
这样就是仅仅操作一个conn 之后循环结束后,关闭conn至于Statement java文档好像是说自动关闭,不过好像是存在争议
stmt.close();
conn.close();
会出问题的....关闭已经关闭的资源会出错的.
把这两句去掉.
ResultSet temprs=sqlBeanId.executeQuery(sql);
while(temprs.next())
{ String unitID=temprs.getString("unit_ID");
String tempsql="insert into TempUnit(unit_ID) values ('"+unitID+"')";
sqlBeanId.executeInsert(tempsql);
}
if(temprs!=null)temprs.close();
if(stmt!=null)stmt.close();
conn.close();
加判断,避免空指针的出现。