亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用Java關閉數據庫連接

用Java關閉數據庫連接

RISEBY 2019-07-10 14:39:36
用Java關閉數據庫連接我有點糊涂了,我正在讀下面的文章http:/en.wikipara.org/wiki/java_Database_ConnectivityConnection 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連接嗎?如果連接()沒有發生,到底會發生什么呢?我有一個私人網絡應用程序,我認為它目前沒有關閉任何一種形式,但重要的是真正的一個,康涅狄格,還是兩者兼而有之?該網站一直斷斷續續地關閉,但服務器一直說這是一個數據庫連接問題,我懷疑它沒有被關閉,但我不知道誰關閉,如果有的話。
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

當你用完你的Connection,您需要顯式地關閉它,方法是調用它的close()方法以釋放任何其他數據庫資源(游標、句柄等)。

實際上,Java中的安全模式是關閉ResultSetStatement,和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類,因此不需要編寫自己的類。


查看完整回答
反對 回復 2019-07-10
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

僅僅關閉就足夠了StatementConnection..不需要顯式關閉ResultSet對象。

Java文檔說java.sql.ResultSet:

當語句對象關閉、重新執行或用于從多個結果序列檢索下一個結果時,生成該語句對象的語句對象將自動關閉ResultSet對象。


謝謝BalusC的評論:“我不相信這一點。有些JDBC驅動程序在這方面失敗了?!?/strong>


查看完整回答
反對 回復 2019-07-10
  • 3 回答
  • 0 關注
  • 1004 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號