猿问

用Java关闭数据库连接

用Java关闭数据库连接

我有点糊涂了,我正在读下面的文章http:/en.wikipara.org/wiki/java_Database_Connectivity

Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword" );Statement stmt = conn.createStatement();try {
    stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );} finally {
    //It's important to close the statement when you are done with it
    stmt.close();}

不需要关闭Conn连接吗?如果连接()没有发生,到底会发生什么呢?

我有一个私人网络应用程序,我认为它目前没有关闭任何一种形式,但重要的是真正的一个,康涅狄格,还是两者兼而有之?

该网站一直断断续续地关闭,但服务器一直说这是一个数据库连接问题,我怀疑它没有被关闭,但我不知道谁关闭,如果有的话。


RISEBY
浏览 968回答 3
3回答

米琪卡哇伊

当你用完你的Connection,您需要显式地关闭它,方法是调用它的close()方法以释放任何其他数据库资源(游标、句柄等)。实际上,Java中的安全模式是关闭ResultSet, Statement,和Connection(按该顺序)finally当你和他们在一起的时候阻止他们,就像这样:Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {     // Do stuff     ...} catch (SQLException ex) {     // Exception handling stuff     ...} finally {     if (rs != null) {         try {             rs.close();         } catch (SQLException e) { /* ignored */}     }     if (ps != null) {         try {             ps.close();         } catch (SQLException e) { /* ignored */}     }     if (conn != null) {         try {             conn.close();         } catch (SQLException e) { /* ignored */}     }}这个finally块可以稍微改进为(以避免空检查):} finally {     try { rs.close(); } catch (Exception e) { /* ignored */ }     try { ps.close(); } catch (Exception e) { /* ignored */ }     try { conn.close(); } catch (Exception e) { /* ignored */ }}但是,这仍然非常冗长,因此您通常会使用帮助类来关闭空安全助手方法中的对象,而finally区块变成了这样的东西:} finally {     DbUtils.closeQuietly(rs);     DbUtils.closeQuietly(ps);     DbUtils.closeQuietly(conn);}实际上,ApacheCommonsDbUtils有一个DbUtils类,因此不需要编写自己的类。

千万里不及你

仅仅关闭就足够了Statement和Connection..不需要显式关闭ResultSet对象。Java文档说java.sql.ResultSet:当语句对象关闭、重新执行或用于从多个结果序列检索下一个结果时,生成该语句对象的语句对象将自动关闭ResultSet对象。谢谢BalusC的评论:“我不相信这一点。有些JDBC驱动程序在这方面失败了。”
随时随地看视频慕课网APP

相关分类

Java
MySQL
我要回答