Java ResultSet 什么也得不到,但 sql get result in mysql



我正在使用MySql数据库,该数据库有一个表'tradeinfo'。表结构:

    Date          TradeCode 
    2017.01.01    0001
    2017.02.05    0002
    2017.03.05    0001

我的sql找到一个交易代码的最新交易日是

    SELECT TradeCode, MAX(date)  most_recent_time   FROM tradeinfo  WHERE  TradeCode = '0001'  

我在Mysql db中测试sql,可以得到正确的结果,即"2017.03.05 0001"但是对于我的java代码,它是"lastestdbrecordsdate = rs.getDate("MOST_RECENT_TIME"(; ",它总是返回正确的结果。但是几天后,当再次运行它时,我总是得到 NULL。我的 java 代码是:

    Connection con = DriverManager.getConnection("jdbc:mysql://...",user,password);
    String sqlstatement = "SELECT TradeCode, MAX(date)  most_recent_time    FROM tradeinfo  WHERE  TradeCode = '0001'  ";
    PreparedStatement sqlstat = con.prepareStatement(sqlstatement);
    ResultSet rsquery = sqlstat.executeQuery(sqlstatement); 
    CachedRowSetImpl cachedRS = new CachedRowSetImpl();
    cachedRS.populate(rsquery);
    while(cachedRS.next() ) {
        System.out.println(cachedRS.getMetaData().getColumnCount());
        Date lastestdbrecordsdate = cachedRS.getDate("MOST_RECENT_TIME");
    }

问题是我错误地配置了mysql还是我写了错误的java代码?谢谢大家!

你在这里有几个问题。 首先,应使用以下查询:

SELECT MAX(date) most_recent_time FROM tradeinfo WHERE TradeCode = '0001'

TradeCode添加到选择列表没有任何意义,因为它不是聚合,而是每条记录都有此列的值。

关于为什么得到空结果,您需要调用ResultSet#next()将光标前进到第一行:

Connection con = DriverManager.getConnection("jdbc:mysql://...", user, password);
Statement sqlstat = con.prepareStatement(sqlstatement);
ResultSet rsquery = sqlstat.executeQuery();    // DON'T pass anything to executeQuery()
if (rsquery.next()) {
    Date lastestdbrecordsdate = rs.getDate("most_recent_time");
}

我刚刚注意到的另一个问题是,您正在将查询字符串传递给对Statement#executeQuery()的调用。 这是错误的,您不应该向此方法传递任何内容。

相关内容

  • 没有找到相关文章