2016-12-05 49 views
0

嗯,我有一個簡單的代碼應該執行一個SQL Server查詢並返回結果集,但我得到了以下錯誤:的executeQuery PreparedStatement的重新調整空

the execute query must return a resultset 

看到代碼:

statement.executeQuery(); 

這個executeQuery()執行一個返回超過100K行的查詢,在SQL SERVER控制檯中一切正常,但在java NOT中。我改變了添加「TOP 10」和executeQuery()的查詢正常工作。

executeQuery()中存在一些超時?正如我所說,我需要返回很多行。

+0

請在問題中包含您的代碼。 –

回答

0

對於每個查詢數據庫將返回多少行通常存在最大限制。

所以你將不得不做的是重複通過結果集,並將不得不對數據庫服務器進行多次調用。

This setMaxRows method has no effect for dynamic scrollable cursors. The application should use SELECT TOP N SQL syntax to limit the number of rows returned from potentially large result sets.

您可以使用這樣的事情:

SELECT TOP N SQL 

更多閱讀here

您可以嘗試的另一件事是使用for循環拆分查詢並動態設置limit。然後你可以按照你想要的方式處理resultset

+0

我不能這樣做,因爲這個調用是在一個庫(jasperreports-3.7.6)中進行的。在類JRJdbcQueryExecuter – RonaldoLanhellas

+0

我知道我可以用「TOP N」解決這個問題,但是我需要獲得所有的行,沒有限制。不可能 ? – RonaldoLanhellas

+0

@Scientist恐怕它不可能。 –

0

嘗試使用EXCEPT語句(例如):

(SELECT * FROM table_name) EXCEPT (SELECT TOP M FROM table_name) 

你需要計算在for循環的每個迭代M的值。 M可以是例如:

M = N/2,N/4,3 * N/4,等...

而且可以使用下面的查詢得到的N的值:

SELECT COUNT(*) FROM table_name