2015-11-23 40 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”);

这是怎么回事?