神奇的weblogic,Connection關閉與Result set already closed!

來源:互聯網
上載者:User

  最近新寫的一套JAVA封裝類,運行期間出現了“java.sql.SQLException: Result set already closed”錯誤,出現的機率比較高,但又有一定的隨機性,注釋掉Resultset的close代碼後問題依舊。

串連代碼如下:

javax.naming.Context initCtx = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)initCtx.lookup(_JNDI_NAME);
if (ds != null) {
_conn = ds.getConnection();
//return _conn;
}

查詢代碼如下:

Statement sm = _conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = sm.executeQuery(sqltext);

網上有說,同一語句運行兩次就會出現些問題。CSDN論壇有說不要直接返回ResultSet,改為返回List:

                List   list   =   new   ArrayList(); 
                Connection   conn   =   null; 
                Statement     stmt   =   null; 
                ResultSet     rs       =   null; 
                try 
                { 
                        conn   =   openConnection(); 
                        stmt   =   conn.createStatement(); 
                        rs       =   stmt.executeQuery(sql); 
                        ResultSetMetaData   rsmd   =   rs.getMetaData(); 
                        while   (   rs.next()   ) 
                        { 
                                Map   map   =   new   HashMap(); 
                                for   (   int   i   =   1;   i   <=   rsmd.getColumnCount();   i++   )
                                { 
                                        map.put(rsmd.getColumnName(i),   rs.getString(i)   ==   null   ?   " "   :   rs.getString(i)); 
                                } 
                                list.add(map); 
                        } 
                } 
                catch   (   Exception   e   ) 
                { 
                        e.printStackTrace(); 
                } 
                finally 
                { 
                        if   (   rs   !=   null   )   rs.close(); 
                        closeConnection(conn); 
                } 
                return   list; 

見:http://topic.csdn.net/t/20040816/23/3280711.html

顯然以上所描述的都不是問題根本解決辦法。在查看封裝類的代碼時確定問題在finalize()上:

public class basePage {

 
protected void finalize()
{
........
dataBase.Disconnect();
}

}

這是因編程習慣而寫下的代碼,注釋後問題消失。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.