hibernate+spring中使用openSession().connection()不能关闭问题。。。
我使用了spring提供的hibernateTemplate进行一些持久操作,但是现在出现一个严重问题:
我采用getHiberanteTemplate().getSessionFactory().openSession().connection()对临时表进行一些操作,比如:取主键字段的 max 值,向临时表中批量插入数据,当我操作完成后,我就关闭了用session获取的Connection,现在问题出现了:如果我关闭了刚才获取的connection,当我再执行相同操作时,报:“JDBC连接已关闭”错误。
代码如下:
/* -----------------获取临时表主键字段最大值------------------- */
public Long getMaxID(){
return (Long)this.getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
long maxID = 0;
try{
conn = session.connection();
pstmt = conn.prepareStatement("select max(id) as maxValue from Test_20080506");
rs = pstmt.executeQuery();
if(rs.next()){
maxID = rs.getLong("maxValue");
}
maxID = maxID + 1;
}catch(Exception e){}finally{
if(rs!=null){rs.close();rs = null;}
if(pstmt!=null){pstmt.close();pstmt = null;}
if(conn != null){conn.close();conn = null;} // conn 一旦关闭,下面的插入数据就不能执行
}
return maxID;
}
});
}
/* ------------------- 批量插入数据 ----------------------- */
public void saveData(String[] insertSql){ // insertSql 包含"insert into ... values(.. )"语句数组
this.getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException{
Connection conn = null;
Statement stmt = null;
try{
conn = session.connection();
conn.setAutoCommit(false);
stmt = conn.createStatement();
for(int i=0; i< insertSql.length; i++){
stmt.addBatch(insertSql[i]);
}
stmt.executeBatch();
conn.commit();
}catch(Exception e){}finally{
if(stmt!=null){stmt.close();stmt = null;}
if(conn != null){conn.close();conn = null;}
}
return null;
}
});
}
上面的代码执行顺序是先执行 getMaxID 方法获取最大值,然后执行 saveData 批量插入,运行结果是:
最大值获取到了,但是当执行到 saveData 方法时,就报错:JDBC connection 已关闭 ,批量插入失败...
为什么啊?难道获取的connection不能关闭吗???