2010-12-27 12 views
1

Ich habe eine Frage zu jdbc Resultset.Frage zu java.sql.resultset

Ich brauche einige Datensätze in einer der Tabelle zu greifen. Wie suche ich nach dem Abrufen der Datensätze im ResultSet nach Datensätzen mit einer Liste von IDs?

Sollte ich das Resultset zuerst in eine hashmap konvertieren?

+1

Machen Sie Ihre Suchvorgänge in der Abfrage selbst –

+0

Lernen Sie die 'WHERE'-Klausel und wenn ich Ihre funktionale Anforderung richtig verstehe, auch die' IN'-Klausel. 'SELECT * FROM Tabellenname WHERE ID IN (1, 2, 3, 4, 5, 6, 7, 8, 9)'. Siehe auch [diese Antwort] (http://stackoverflow.com/questions/2861230/what-is-the-best-approach-using-jdbc-for-parameterizing-an-in-clause). Auf diese Weise erhalten Sie genau die Zeilen, die Sie in Ihrem Java-Code haben möchten, ohne die gesamte Datenbank in den Java-Speicher zu duplizieren und möglicherweise die Java-Anwendung aufgrund von zu wenig Arbeitsspeicher zu löschen. – BalusC

Antwort

1

Angenommen, Sie möchten die SQL-Abfrage nicht so ändern, dass nur diese Ergebnisse abgerufen werden, sondern die Ergebnisse in eine nützlichere Datenstruktur konvertieren (z. B. ein Objekt für jeden Datensatz erstellen und dann in einem Hash speichern) Karte nach ID) ist eine gute Art zu gehen, ja.

0

Betrachten Sie eine ResultSet als nur eine Art Schnittstelle zu Ihrer DB, das ResultSet selbst enthält keine Daten, also nicht viel zu suchen.

Also wenn Sie manipulieren müssen, suchen, ... lesen Sie besser alle Daten in eine Struktur.

Eine Hash-Struktur wird wahrscheinlich am besten sein, aber das hängt davon ab, wie Sie Ihre Daten strukturiert haben.

Das einzige, was Sie nicht tun sollten, ist mehrere Male über die ResultSet Interate weil, wenn Sie spezielle Caching-Implementierung verwenden, werden Sie mit Hilfe durch die Suchresultates durch eine Schleife durchlaufen kann dazu führen, eine Menge unnötigen Datenbankverkehr

0

Sie von "next()" [resultSet.next()] Methode. Holen Sie sich die Werte mit getString(), getInt() ......

Ex: Lassen rs mein resultset sein,

while (rs.next()) {

Sop ("Name:" + rs.getString ("Name")); S.o.p ("Alter:" + rs.getInt ("Alter")); }

+0

danke für die antwort ramzi :) –

+0

willkommen vyas ... –

0

Ich stimme zu, dass eine HashMap funktioniert. Wenn die Anzahl der Datensätze groß ist, können Sie Zeit und Speicher sparen, indem Sie die ResultSet-Daten nicht in eine Struktur laden. Wenn Sie in Ihrer Abfrage ORDER BY ID verwenden, können Sie Ihre Daten problemlos direkt von Ihrem ResultSet mit rs.next(); abrufen.

2

Nach dem Abrufen der Datensätze, wie suche ich Datensätze im ResultSet mit einer Liste von IDs?

Dies ist der falsche Weg. Sie sollten in Ihrer SQL-Abfrage suchen und filtern, bevor Sie das ResultSet erhalten.

Danach vorausgesetzt, Sie haben ResultSet rs bekam, durchlaufen sie

while (rs.next()) { 
    // do whatever you want with results 
} 

mit Doing ON ResultSet Suche -> schlechte Praxis.