Gast JulianB Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 (bearbeitet) Hallo Zusammen, ich suche nach einer Möglichkeit Datensätze aus einer Datenbank, unabhängig vom benutzten DBMS, "portioniert" abzufragen. Ich möchte also nicht die klassische Pagination nutzen, wo alle Datensätze erst einmal in den Speicher geladen werden und dann im UI aufgeteilt werden. Sondern bei sagen wir mal 1000 Datensätzen lediglich die ersten 100 aus der Datenbank holen, sollte der Benutzer mehr sehen wollen dann die nächsten 100 Datensätze usw. Das Problem besteht für mich darin das ich die Datensätze pro Tabelle nicht global identifizieren kann, beispielsweise an einer vergebenen ID o.ä. Das gesamte System zu erklären dauert leider zu lange daher ist dieser Punkt als gegeben hinzunehmen. Zwar bieten mit PreparedStatements und ResultSets die Möglichkeit die Anzahl der zurückgebenen Datensätze auf n zu beschränken, aber ich habe keine Option um festzulegen: Gebe mir n Datensätze ab Position x. Was ich suche ist hier die Option "ab Position x". Kurz zum Umfeld: Ich entwickle ein Webfrontend unter Apache Wicket (Java) welches seine Daten im Hintergrund aus einer Datenbank zieht. Da hierbei mehrere DBMS unterstützt werden kann ich das leider nicht vom verwendeten SQL abhängig machen. Die Anzahl der Datensätze variiert von Kunde zu Kunde, so gibt es einige Systeme wo teilweise bis zu 500.000 Datensätze vorhanden sind. Um unnötigen Traffic zu sparen suche ich nun nach der oben beschriebenen Möglichkeit lediglich einen Teil der vorhandenen Datensätze abzurufen und den Rest, ebenfalls in kleinen Häppchen, auf Benutzeranfrage. Ich hoffe es wird einigermaßen klar wonach ich suche und ihr könnt mir helfen. Vielen Dank und liebe Grüße, JulianB Bearbeitet 25. Februar 2011 von JulianB
R1I9C8H5I Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 Das muss die Datenbank unterstützen. Bei MySQL gibt es da beispielsweiße das Statement "Limit".
Gast JulianB Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 (bearbeitet) Und genau da liegt ja leider das Problem, Statements wie OFFSET, LIMIT oder TOP kann ich leider nicht benutzen, es muss für MSSQL, Oracle, DB2, Informix, usw. funktionieren... Bearbeitet 25. Februar 2011 von JulianB
Gooose Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 (bearbeitet) Wir haben letztens einen datenbankseitigen Pager gebaut. der das Suchergebnis zunächst in eine temporäre Tabelle kopiert, die wiederum via dynamischen SQL abgefragt wird. Wenn du nicht die komplette Tabelle übertragen willst, bleibt dir nicht viel anderes übrig als die Seiten innerhalb der DB vorzubereiten. Wie viele DBMS müssen unterstützt werden? Ein DB-neutrales Paging ist mir nicht bekannt. edit: bei einer unbekannten Anzahl von Datenbanksystemen wird es nicht einfach. Bearbeitet 25. Februar 2011 von Gooose
Schiller256 Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 Hast du schon mal darüber nachgedacht anstatt plain SQL zu verwenden einen Persistenz Layer einzuziehen? Du könntest da z.B. JPA verwenden da brauchst du dir über die Eigenheiten der DB keine/wenig Gedanken machen.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden