[英]Java ResultSet get nothing but 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()
调用。 这是错误的,您不应该向此方法传递任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.