Derzeit arbeiten wir in der Bereitstellung eines OFBiz-basierten ERP, wir sind zu dem folgenden Problem gekommen: ein Teil des Codes des Frameworks ruft resultSet.last() auf, um die gesamten Zeilen des Resultsets zu kennen. Mit dem Oracle JDBC-Treiber v11 und v10 wird versucht, alle Zeilen im Client-Speicher zwischenzuspeichern, wodurch die JVM abstürzt, da nicht genügend Heap-Speicher zur Verfügung steht.Unterstützt Oracle serverseitige Scrollable-Cursor über JDBC?
Nach der Untersuchung scheint das Problem zu sein, dass die Oracle JDBC den Scrollable Cursor auf der Clientseite statt auf dem Server durch die Verwendung eines Cache implementiert. Mit dem Datadirect-Treiber ist dieses Problem gelöst, aber es scheint, dass der Aufruf von resultset.last() zu viel dauert, damit der Anwendungsserver die Transaktion abbricht
Gibt es eine Möglichkeit, scrollbare Cursor über jdbc in zu implementieren Oracle, ohne auf den Datadirect-Treiber zurückgreifen zu müssen?
und was ist der schnellste Weg, um die Länge eines bestimmten Ergebnisses zu wissen?
Vielen Dank im Voraus Ismael
Ich werde zuerst eine Tangentenfrage stellen; Benötigen Sie die Daten und die Größe des Resultsets gleichzeitig oder können Sie einfach eine COUNT (*) Abfrage durchführen, um die Anzahl der Zeilen zu ermitteln? Brauchen Sie WIRKLICH die Anzahl der Zeilen auch, ich habe das zu oft gesehen, wo ein Programm die sehr teure Operation ausführt, um die Gesamtzahl der Zeilen für die Paginierung zu erhalten, wenn sie wirklich nicht benötigt wird. – Gandalf
Es muss die Anzahl der Seiten in einem Paginierungsschema bestimmt werden. Wir versuchen, die Verwendung von last zu vermeiden und den currentIndex mit der Iterator next() -Methode auf Null zu zählen. Gibt es eine schnelle Möglichkeit, die Anzahl der Seiten zu kennen, ohne die last() -Methode zu verwenden? Unsere Problemumgehung besteht darin, eine COUNT-Abfrage mit denselben Bedingungen auszuführen und dann die Abfrage für die Daten auszuführen. – Ismael
Muss der Benutzer die Anzahl der Seiten wissen? Gibt es einen gültigen Benutzerfall, in dem ein Benutzer direkt zur letzten Seite wechseln möchte? Normalerweise fragen wir nur nach einem weiteren Eintrag, der für eine Seite benötigt wird. Wenn dieser Eintrag existiert, setzen Sie einen Link für die "nächste" Seite - requery, um die nächste Seite zu erhalten. Angenommen, Ihre Daten haben eine Reihenfolge, nach der Sie sortieren können. – Gandalf