Как я могу получить значения из SQL-запроса выше, используя JDBC и JavaDB / Derby в качестве базы данных?
Чтобы получить значения, вы должны использовать имя столбца ResultSet
. Имя столбца, используемое в ResultSet
, будет исходным именем столбца или псевдонимом.
Если ваш ResultSet
имеет столбцы с тем же именем или псевдонимом, getInt()
вернет первое совпадение.
С вашим выбором ...
SELECT * FROM posts, users WHERE user_id = users.id
... rs.getInt()
вернет только posts.id
, поскольку это будет первый столбец.
Как я могу различить столбец id в таблице users и posts при получении значений с помощью ResultSet?
Вы можете использовать уникальный псевдоним для каждого столбца или ResultSetMetaData
.
- Решение 1: Использовать псевдоним SQL
SQL
SELECT p.id AS post_id,
p.name AS post_name,
u.id AS user_id,
u.message AS user_message
FROM POSTS p
JOIN USERS u
ON u.id = p.user_id
Java * +1039 *
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("post_id");
rs.getInt("user_id");
}
- Решение 2: Использование
ResultSetMetaData
SQL
SELECT p.id
p.name
u.id
u.message
FROM POSTS p
JOIN USERS u
ON u.id = p.user_id
Java
Integer userID;
Integer postID;
ResultSetMetaData rsMeta = rs.getMetaData();
if (rs.next()) {
for (int i = 1; i <= rsMeta.getColumnCount(); i++) {
String table = rsMeta.getTableName(i);
String col = rsMeta.getColumnName(i);
if(table.equals("users") && col.equals("id")){
userID = rs.getInt(i);
continue;
}
if(table.equals("posts") && col.equals("id")) {
userID = rs.getInt(i);
continue;
}
}
}