设置conn.setAutoCommit(false);用完conn要不要设置回true再close?

广寒月蛮兔 2017-12-22 11:11:43
close是把conn还给连接池,那只是还给连接池的话,另外一个接口还有可能拿到这个链接吧?
...全文
850 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-01-09
  • 打赏
  • 举报
回复
引用 3 楼 hjgzj 的回复:
用完conn要不要设置回true再close? 答:不需要 close是把conn还给连接池,那只是还给连接池的话,另外一个接口还有可能拿到这个链接吧? 答:你有了连接池,为何还要手动close来关闭?不应该是连接池来管理的吗?
一般连接池拿到的connection对象的close方法就是并不是关闭连接,而是重写成归还connection对象到连接池,用完自然是需要调用close方法的,当然基本也没人直接操纵连接池的连接,现在持久化都用框架做了 还有conn.setAutoCommit(false);这个最好还是设置回去为true,因为池子里的connection原始状态就是自动提交,用完就原样归还,因为别的地方拿连接的时候他预期的也是那样
  • 打赏
  • 举报
回复
用完conn要不要设置回true再close? 答:不需要 close是把conn还给连接池,那只是还给连接池的话,另外一个接口还有可能拿到这个链接吧? 答:你有了连接池,为何还要手动close来关闭?不应该是连接池来管理的吗?
广寒月蛮兔 2018-01-08
  • 打赏
  • 举报
回复
引用 1 楼 maradona1984 的回复:
当然能,池子里的连接就是重复利用的
那我在连接池拿到一个链接,然后设置conn.setAutoCommit(false);用完直接还给链接池。如果其他接口拿到这个连接,autoCommit这属性会是false而不是true吗?
maradona1984 2017-12-22
  • 打赏
  • 举报
回复
当然能,池子里的连接就是重复利用的
package com.xr.util; import java.lang.reflect.Method; import java.sql.*; import java.util.*; import org.junit.Test; import com.xr.dto.ManagerDTO; public class DBHelper { private Connection conn = null; { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("创建驱动失败"); e.printStackTrace(); } try { conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/xc","root", "root"); } catch (SQLException e) { System.out.println("创建连接失败"); e.printStackTrace(); } } // 单表新增,修改,删除 public boolean excuteUpdate(String sql) { if (conn == null) return false; boolean sign = false; try { Statement stat = conn.createStatement(); int i = stat.executeUpdate(sql); if (i > 0) { sign = true; } else { sign = false; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { } return sign; } } // 多表新增,修改,删除 public boolean excuteUpdate(Object... sql) { if (conn == null) return false; boolean sign = false; try { conn.setAutoCommit(false); Statement stat = conn.createStatement(); for (Object o : sql) { stat.addBatch(o.toString()); } stat.executeBatch(); conn.commit(); sign = true; } catch (Exception ex) { conn.rollback(); sign = false; ex.printStackTrace(); } finally { try { conn.setAutoCommit(true); conn.close(); } catch (SQLException e) { } return sign; } } @Test public void tet() throws SQLException{ List list=(List) conn.createStatement().executeQuery("select name from tbl_manager where B_id='1'"); ManagerDTO m=(ManagerDTO) list.get(0); System.out.println("aaaaaaa"+m.getName()); } // 单表查询 public List excuteQuery(String sql, String objName) { if (conn == null) return null; List list = new ArrayList(); try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(sql); Class c = Class.forName(objName); Method[] ms = c.getDeclaredMethods(); ResultSetMetaData rsmd=re.getMetaData(); while (re.next()) { Object obj = c.newInstance(); for (int i = 0; i < ms.length; i++) { Method m = ms[i]; if (m.getName().startsWith("set")) { String name = m.getName().substring(3); for(int j=1;j<=rsmd.getColumnCount();j++){ if(name.equalsIgnoreCase(rsmd.getColumnName(j))){ m.invoke(obj, re.getString(name)==null?"":re.getString(name)); break; } } } } list.add(obj); } } catch (Exception ex) { list = null; ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { } return list; } } /*标量结果*/ public Object executeScare(String sql){ if (conn == null) return null; Object obj = null; try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(sql); if (re.next()) { obj=re.getString(1); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { } return obj; } } // 单个对象的查询 public Object excuteOneQuery(String sql, String objName) { if (conn == null) return null; Object obj = null; try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(sql); Class c = Class.forName(objName); Method[] ms = c.getDeclaredMethods(); ResultSetMetaData rsmd = re.getMetaData(); if (re.next()) { obj = c.newInstance(); for (int i = 0; i < ms.length; i++) { Method m = ms[i]; if (m.getName().startsWith("set")) { String name = m.getName().substring(3); for(int j=1;j<=rsmd.getColumnCount();j++){ if(name.equalsIgnoreCase(rsmd.getColumnName(j))){ m.invoke(obj, re.getString(name)==null?"":re.getString(name)); break; } } } } } } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { } return obj; } } // 多表查询 public List excuteQuery(String sql) { if (conn == null) return null; List list = new ArrayList(); try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(sql); ResultSetMetaData remd = re.getMetaData(); while (re.next()) { List row = new ArrayList(); for (int i = 1; i < remd.getColumnCount() + 1; i++) { row.add(re.getString(i)==null?"":re.getString(i)); } list.add(row); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { } return list; } } // 多表查询,单条记录返 public List excuteOneQuery(String sql) { if (conn == null) return null; List row = new ArrayList(); try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(sql); ResultSetMetaData remd = re.getMetaData(); if (re.next()) { for (int i = 1; i < remd.getColumnCount() + 1; i++) { row.add(re.getString(i)); } } } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { } return row; } } }

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧