Frage

Ich habe eine JDBC-Abfrage ausgeführt, um einen Suchresultates zu erhalten. Vor über sie iterieren, würde Ich mag schnell herausfinden, wie viele Zeilen zurückgegeben wurden. Wie kann ich das mit hohen Leistung?

Ich bin mit Java 6, Oracle 11g und die neuesten Oracle-JDBC-Treiber.

War es hilfreich?

Lösung

Du gehst zu haben, das als eine separate Abfrage zu tun, zum Beispiel:

SELECT COUNT(1) FROM table_name

Einige JDBC-Treiber könnte Ihnen sagen, aber das ist nicht das Verhalten und mehr auf den Punkt, weiß der Fahrer noch nicht. Dies kann zurückzuführen sein, wie die Abfrage zB zwei Beispielausführungsstrategien in Oracle optimiert wird alle Zeilen so schnell wie möglich oder die erste Zeile, so schnell wie möglich zu erhalten.

Wenn Sie das tun zwei separate Abfragen (eine eine Zählung und die andere die Abfrage) dann müssen Sie sie innerhalb derselben Transaktion zu tun. Dies wird auch auf Oracle arbeiten, sondern kann auf andere Datenbanken (zB SQL Server entweder problematisch sein, zeigen Ihnen unbestätigten Daten oder Block auf einem externen uncommitted Update auf Isolationsstufe abhängig, während Oracle eine Isolationsstufe unterstützt, die Ihnen eine transaktions konsistente Sicht auf das gibt Daten ohne auf externes Updates blockiert).

Normalerweise wenn es nicht Minster, wie viele Zeilen gibt. Normalerweise ist diese Art der Abfrage ist entweder Batch verarbeitet oder ausgelagert und entweder so, wie Sie Informationen haben, in Form von Zeilen geladen / verarbeitet Fortschritt und Sie können das Ende der Ergebnismenge (natürlich) erkennen.

Andere Tipps

ResultSet rs = stmt.executeQuery(sql);
int rowCount = rs.last() ? rs.getRow() : 0; // Number of rows in result set. Don't forget to set cyrsor to beforeFirst() row! :)

Kurze Antwort:. Sie können nicht

Lange Antwort:. Sie können nicht, zum Teil, weil die Datenbank lazily kann die Abfrage nur zurückkehr Reihen Auswertung werden, wie Sie sie fragen

EDIT: Mit einem scrollbaren ResultSet können Sie:)

Ja, ich fragte diese Frage in der Java-Datenbanken Newsgroup vor langer Zeit (im Jahr 2001!) Und hatte "einig hilfreiche Antworten .

Um die Anzahl der Zeilen aus JDBC zu erhalten:

ResultSet rs = st.executeQuery("select count(*) from TABLE_NAME");
rs.next();
int count = rs.getInt(1);

Wenn Ihr Treiber unterstützt (!), Können Sie rufen ResultSet.afterLast () ResultSet.getRow () ResultSet.beforeFirst (). Leistung kann oder kann nicht gut sein.

Eine bessere Lösung wäre Ihr Algorithmus neu zu schreiben, nicht die Größe vorne erforderlich ist.

Ohne ternären Operator

rs.last();  // Moves the cursor to the last row in this ResultSet object.
int rowCount = rs.getRow();  //Retrieves the current row number.
rs.beforeFirst(); //Moves the cursor to the front of this ResultSet object,just before the first row.

Mit ternärem Operator einer Zeile

int rowCount = rs.last() ? rs.getRow() : 0; 
rs.beforeFirst();

Code:

//Create a Statement class to execute the SQL statement
Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT COUNT(*) AS COUNT FROM
TABLENAME");

 while(rs.next()) {
    System.out.println("The count is " + rs.getInt("COUNT"));
 }

 //Closing the connection
 con.close();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top