2016-12-05 1 views
0

Nun Neuabstimmung, ich habe einen einfachen Code, der eine SQL Server-Abfrage ausgeführt werden soll und eine Ergebnismenge zurückgeben, aber ich habe den folgenden Fehler:executeQuery PreparedStatement null

the execute query must return a resultset 

den Code Siehe:

statement.executeQuery(); 

Diese executeQuery() führt eine Abfrage, die mehr als 100K Zeilen zurückgibt, in der SQL SERVER-Konsole funktioniert alles, aber in Java nicht. Ich habe die Abfrage geändert, indem ich eine "TOP 10" hinzugefügt habe und executeQuery() normal funktioniert.

Existiert ein Timeout in executeQuery()? Ich muss viele Zeilen zurückgeben, wie ich schon sagte.

+0

Bitte geben Sie Ihren Code in der Frage ein. –

Antwort

0

Es gibt normalerweise eine Höchstgrenze für die Anzahl der Zeilen, die die Datenbank pro Abfrage zurückgibt.

Sie müssen also das Ergebnisset wiederholen und müssen mehrere Aufrufe an den Datenbankserver senden.

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.

Sie können so etwas wie folgt verwenden:

SELECT TOP N SQL 

Weitere lesen here.

Eine andere Sache, die Sie versuchen können, ist die Abfrage mit einer for-Schleife aufteilen und die limit dynamisch setzen. Dann können Sie die resultset so behandeln, wie Sie möchten.

+0

Ich kann es nicht tun, weil dieser Aufruf innerhalb einer Bibliothek erfolgt (jasperreports-3.7.6). In der Klasse JRJdbcQueryExecuter – RonaldoLanhellas

+0

weiß ich, dass ich das mit "TOP N" lösen kann, aber ich brauche alle Zeilen ohne Einschränkung zu bekommen. Ist nicht möglich ? – RonaldoLanhellas

+0

@Scientist Ich fürchte, es könnte nicht möglich sein. –

0

Try AUSSER Anweisung (zum Beispiel) mit:

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

Sie werden den Wert von M in jeder Iteration eines for-Schleife berechnen müssen. M kann zum Beispiel sein:

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

Und Sie können den Wert von N mit der folgenden Abfrage erhalten:

SELECT COUNT(*) FROM table_name