2016-11-24 4 views
0

私はSQLデータベースにクエリを実行しており、160行を要求するときにデータベースに44行しかないと、ResultSetは160行を返します。この場合、最初の44行は実際の有用な数値を持ち、残りの116行はすべて0の値を持ちます。 ResultSetには、データベースクエリから返される44行のみが含まれていますか、または私に提供するにはどうすればよいですか?ここでは、コード断片である: 結果セットは160を返しますが、データベースは44行を返します。 WHY

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); 
} 

はこのループから出てくる、カウントが 160に等しいですが、 44に等しくなければなりません。配列 valuesRetrieved[]には実際に使用可能な値の44要素があり、残りの114値はすべてゼロに等しくなります( 0)。配列は44個の値しか持たないはずです。

+0

DBのどの王様を使用していますか? –

+0

dbに対して直接クエリを実行し、取得する行の数を確認します。 –

+0

'valuesRetrieved'を宣言する方法を教えてください。' double [] valuesRetrieved = new double [160] 'を使って宣言した場合、' 0'はクエリ結果から来ません。 –

答えて

0

Statement.setMaxRows

void setMaxRows(int max) throws SQLException; 

使用してみてくださいsetMaxRowsの利点は、あなたが一般など

Postgresでは、オラクル、MySQL用の有効な文、実際には、OracleはROWNUM構文を使用している、postgresのを作成することができるということです - LIMIT、msqsql - TOP

0

フェッチサイズを制限するのはドライバ固有の反応ですか? resultSet.isAfterLast()は空行を返しますか?

0

ありがとうございました。 Nicholas Filottoは正解を持っていました。メソッドの先頭には、次のように値の宣言があります。

double [] valuesReceived = new double [160];

問題がステートメントを使用しないで固定されている:

をValuesReceived [カウント++] = resultSet.getDouble(1)。

さらに1つの特殊性があります。私はgetFetchSize()が何をするのか理解してはいけません。なぜなら、ステートメントは次のようになるからです。

int xxx = resultSet.getFetchSize();

は常にxxxに割り当てられます。

関連する問題