2015-11-23 43 views
0

當我最近重新啓動服務器時,我已經開始收到很多警告。 警告看起來像這樣:resultset.getTimestamp和ThreadLocal警告Java

Web應用程序[/ xxx]創建了一個類型爲[net.sourceforge.jtds.jdbc.Support $ 1]的鍵的ThreadLocal(值爲[net.sourceforge.jtds.jdbc.Support $ 1 @ 29173d71])以及[java.util.GregorianCalendar]類型的值 ... ,但在Web應用程序停止時未能將其刪除。

我終於找到在創建該代碼行它:

cp.setCreationDate(rset.getTimestamp( 「CreationDate」));

RSET的類型爲java.sql.ResultSet中

有什麼錯我是如何從數據庫中獲取的日期或者是有沒有辦法刪除日曆? 我們一直這樣做,我不知道爲什麼這些錯誤已經開始,但他們現在真的垃圾郵件日誌。

我發現這個線程: Java ResultSet.getTimestamp using Calendar & Thread safety

,但我仍然得到錯誤。

+0

什麼是cp的類型?檢查setCreationDate方法的API並查看是否有方法清除該方法存儲的信息。然後,當服務器關閉時,您需要調用其他方法。 –

+0

你好,謝謝你的回覆。 但是cp只是一些類。 如果我將該行更改爲: Timestamp i = rset.getTimestamp(「CreationDate」); 錯誤仍然存​​在 – Johannes

回答

1

呼叫rset.close()一旦你完成了ResultSet對象本身,它將釋放ResultSet所保存的資源。

+0

我相信它我相信。 在此之上發佈了新文章。 – Johannes

+0

從發佈爲答案的代碼中,如果rset.getTimestamp()拋出SQLException,則不會調用rset.close()。嘗試將所有close()調用放在finally塊中。 –

+0

嘿,你是對的,但那不是問題。 沒有發現錯誤,應用程序正常工作。 它只是這些警告已經出現無處不在。 我現在認爲它必須以某種方式處理環境,而不是代碼本身。 與Java版本或導入的罐子或東西混淆了某事。 我知道這是相當不可能的,任何人都可以提供給我的信息,所以我現在就離開這個線程。如果我對此有所瞭解,我會爲我的問題添加任何解決方案。 – Johannes

0

我關閉了結果集。 這是現在的代碼(簡化爲只顯示我的問題):

public CompanyPerson getCompanyPerson(int personId) throws SQLException {   
    CompanyPerson person = new CompanyPerson(); 
    Connection con = null; 
    PreparedStatement pstmt = null; 
    ResultSet rset = null; 

    StringBuffer sql = new StringBuffer(); 
    sql.append(" select CreationDate from CMCompanyPeople person "); 
    sql.append(" where person.PersonId=?");   

    try { 
     con = dataSource.getConnection(); 
     pstmt = con.prepareStatement(sql.toString()); 
     pstmt.setInt(1,personId); 

     rset = pstmt.executeQuery(); 

     if (rset.next()) { 
      Timestamp t = rset.getTimestamp("CreationDate"); 
     } 

     rset.close(); 
     pstmt.close(); 
     con.close();   

    } catch (SQLException e) { 
     throw e; 
    } finally { 
     closeConnection(con); 

    } 

    return person; 
} 

當我運行在服務器重新啓動代碼和我得到了上述錯誤。

除去下面的代碼後,我沒有得到任何錯誤

時間戳t = rset.getTimestamp( 「CreationDate」);

這是怎麼回事?