Wie kann ich die Spalten identifizieren, bei der Auswahl aus mehreren Tabellen mit JDBC?
Ich habe zwei Tabellen, die ich an die id-Spalte, sehen Sie wie:
+-------+
| users |
+----+--+---+
| id | name |
+----+------+
+-------+
| posts |
+-------+------+---------+
| id | user_id | message |
+----+---------+---------+
Und jetzt will ich auswählen, um alle posts und den Benutzernamen enthalten, mit:
SELECT * FROM posts, users WHERE user_id = users.id
Und dann versuche ich die Werte mit:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("posts.id");
...
}
Aber ich bekomme SQLException
bei der Ausführung rs.getInt("posts.id")
:
java.sql.SQLException: Column 'posts.id' not found.
Wie bekomme ich die Werte aus der SQL-Abfrage oben mit JDBC und JavaDB/Derby als Datenbank?
Wie kann ich unterscheiden zwischen der id
Spalte in der users
und posts
Tabelle beim abrufen der Werte mit ResultSet
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie versuchen zum abrufen der
id
Wert, aber du bist mit "posts.id" zu verweisen. NichtAlles, was Sie brauchen, ist die Spalte name oder alias, nicht der name der Tabelle sowie:
Es würde gearbeitet haben, wenn die Spalte name selbst war " - posts.id", aber ich empfehle, mit Unterstrich (_) anstelle eines Zeitraum Sie wählen sollten, um die Tabelle zu aktualisieren.
, Aber ich habe eine Spalte " id " in beiden Tabellen, wie kann ich zwischen Ihnen zu unterscheiden?
Müssen Sie eine Spalte angeben, alias:
...und der Verweis, dass die Spalten-alias in der Java-code:
id
Spalte in beiden Tabellen, wie kann ich zwischen Ihnen zu unterscheiden, wenn ich nurrs.getInt("id")
stattrs.getInt("posts.id")
undrs.getInt("users.id")
?Lösung 1 : verwenden Sie alias
Lösung 2: entfernen Sie die doppelte Benutzer.id, da Sie diese schon in der posts-Tabelle
Alias den Namen der Spalten
je nach sql-Geschmack, der alias muss möglicherweise
Um Werte, sollten Sie die
ResultSet
's Spalte name. Die Spalte name in derResultSet
werden die original-Spalte den Namen oder den alias.Wenn Ihr
ResultSet
hat Spalten mit dem gleichen Namen oder einem alias, dergetInt()
wird wieder das erste Spiel.Mit Ihr wählen ...
...die
rs.getInt()
wird nur die Rückkehrposts.id
da es die erste Spalte.Können Sie einen eindeutigen alias für jede Spalte oder verwenden Sie den
ResultSetMetaData
SQL
Java
ResultSetMetaData
SQL
Java
vereinfachen Sie diese weiter, indem Sie erste Daten gemäß der Spalte index, anstatt es durch die Spalte name..!! was auch immer Daten, die wir abrufen von DB gespeichert wird im Ergebnis-set in der Reihenfolge der Spalten gemäß der select-Anweisung anstatt also immer die Daten gemäß der Spalte name lieber das abrufen von Daten gemäß der Spalte index in der Folge an..
ex:
diese wird Ihnen helfen, tun, Weg mit der Komplexität und Verwirrung schuf, die durch ähnliche Spaltennamen in der Datenbank Tabellen..
Hoffe das hilft...
Alle das beste..!!