Resultset返回160但数据库返回44行;为什么

时间:2016-11-24 17:16:22

标签: java sql resultset

我正在查询我的SQL数据库并发现当我要求160行时,数据库只有44行,ResultSet返回160行。发生这种情况时,前44行具有实际有用的数值,其余116行具有全部0的值。如何让ResultSet仅包含或提供从数据库查询返回的44行?这是代码片段:

statement = connection.createStatement();

query = "SELECT " + "Close" + ", Volume" + " FROM source_data_manager.TradingData_daily WHERE Exchange = '" + exchange + 
   "' and Symbol = '" + symbol + "' order by EntryID DESC limit " + 160 + ";";

//Execute the query
resultSet = statement.executeQuery(query);
//Loop through the results
int    count  = 0;
while (resultSet.next())
{
   valuesRetrieved[count++] = resultSet.getDouble(1);
   volume += resultSet.getLong(2);
}

退出此循环,count等于160但应等于44。数组valuesRetrieved[]有44个实际可用值元素,其余114个值都等于零(0)。该数组中只应包含44个值。

3 个答案:

答案 0 :(得分:0)

尝试使用Statement.setMaxRows

void setMaxRows(int max) throws SQLException;

setMaxRows的优点是你可以创建一般语句,对Postgres,Oracle,Mysql等有效。

事实上,Oracle正在使用ROWNUM语法,postgres - LIMIT,msqsql - TOP

答案 1 :(得分:0)

很奇怪,可能是驱动程序特定的反应限制没有获取大小? 对于空行,resultSet.isAfterLast()会返回什么?

答案 2 :(得分:0)

谢谢大家的回复。尼古拉斯·菲洛托有正确的答案。在方法的顶部是valuesRetrieved声明如下:

double [] valuesReceived = new double [160];

通过不使用语句来解决问题:

valuesReceived [count ++] = resultSet.getDouble(1);

还有一个特点。我不能理解getFetchSize()的作用,因为声明:

int xxx = resultSet.getFetchSize();

总是会将0分配给xxx ....不要理解为什么。