Gast JulianB Geschrieben 25. Februar 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R1I9C8H5I Geschrieben 25. Februar 2011 Teilen Geschrieben 25. Februar 2011 Das muss die Datenbank unterstützen. Bei MySQL gibt es da beispielsweiße das Statement "Limit". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast JulianB Geschrieben 25. Februar 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 25. Februar 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 25. Februar 2011 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.