+ -
当前位置:首页 → 问答吧 → DataSource释放connection问题

DataSource释放connection问题

时间:2011-08-29

来源:互联网

Connection con=null;
Statement st=null;
try{
  Context context = new InitialContext();  
  DataSource ds = (DataSource) context.lookup("ORA_JNDI");  
  con = ds.getConnection();  
  con.setAutoCommit(false);  
  st = con.createStatement();
  st.executeUpdate(sql1);
  int n=st.executeUpdate(sql2);
  if(n<=0){
  con.rollback();//此处是否一定要rollback?
  return;
  }
  st.executeUpdate(sql3);
  con.commit();
}catch(Exception e){
  if(con!=null)con.rollback();
}finally{
  if(con!=null)st.close();
  if(con!=null){
  con.setAutoCommit(true); //此处是否要设置会自动提交?
  con.close();
  }
}

使用数据源连接数据库的时候,最后是要关闭connction的,那如果设置为手动提交,在关闭前是不是一定要rollback或commit,关闭前是否要把自动提交改回true?如果不改回,那其他线程在得到这个connection的时候,岂不是默认为手动提交,如果按通常做法,岂不是不会去执行commit(),那数据库不就没有更新吗?

作者: sixiangzhe   发布时间: 2011-08-29

st.executeUpdate(sql1);
  int n=st.executeUpdate(sql2);

if(n<=0){
  con.rollback();//此处是否一定要rollback?
  return;
  }

你这里有两个更新语句,相当于两个事物,如果这两个事物是有关联(比如,a成功,b成功就合法,a成功,b不成功就非法)的那么就
需要rollback
如果没有关联就不需要rollback


  con.setAutoCommit(true); //此处是否要设置会自动提交?

不需要,这个应该是在连接池那边设置的,你这里设置的没用

作者: tianshi1017   发布时间: 2011-08-29

热门下载

更多