我正在查询我的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个值。
答案 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 ....不要理解为什么。