我在id-column上加入了两个表,它们看起来像:
+-------+
| users |
+----+--+---+
| id | name |
+----+------+
+-------+
| posts |
+-------+------+---------+
| id | user_id | message |
+----+---------+---------+
现在我想选择所有帖子并包含用户名:
SELECT * FROM posts, users WHERE user_id = users.id
然后我尝试用以下方法获取值:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("posts.id");
...
}
但是在执行SQLException
时我得到rs.getInt("posts.id")
:
java.sql.SQLException: Column 'posts.id' not found.
如何使用JDBC和JavaDB / Derby作为数据库从上面的SQL查询中获取值?
在使用id
检索值时,如何区分users
和posts
表格中的ResultSet
列?
答案 0 :(得分:10)
您正在尝试检索id
值,但您使用“posts.id”来引用它。 不要
您只需要列名或别名,而不是表名:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("id");
...
}
如果您的列名称本身是“posts.id”,它会起作用,但如果您选择更新表格,我建议使用下划线(_)而不是句号。
您需要指定列别名:
SELECT p.id AS post_id,
p.name,
u.id AS users_id,
p.user_id, --redundant due to relationship, omit if possible
u.message
FROM POSTS p
JOIN USERS u ON u.id = p.user_id
...并在Java代码中引用该列别名:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("post_id");
...
}
答案 1 :(得分:2)
解决方案1:使用别名
select u.id as uid, u.name, p.id as post_id, p.user_id, p.message from
users u inner join posts p on u.id=p.user_id
解决方案2:删除重复的user.id,因为您已在posts表中找到它
select p.user_id, u.name, p.id as post_id, p.message from
users u inner join posts p on u.id=p.user_id
答案 2 :(得分:0)
别名列名
SELECT
posts.id posts_id,
name name,
id id,
user_id,
message
FROM posts
INNER JOIN users
ON posts.user_id = users.id
取决于你的sql风格,该别名可能需要
posts.id as posts_id
答案 3 :(得分:0)
如何使用JDBC和JavaDB / Derby作为数据库从上面的SQL查询中获取值?
要获取值,您应使用function
的列名。 ResultSet
中使用的列名称将是原始列名称或别名。
如果您的ResultSet
包含具有相同名称或别名的列,则ResultSet
将返回第一个匹配项。
选择...
getInt()
... SELECT * FROM posts, users WHERE user_id = users.id
将仅返回rs.getInt()
,因为它将是第一列。
在使用ResultSet检索值时,如何区分users和posts表中的id列?
您可以为每列使用唯一的别名,也可以使用posts.id
SQL
ResultSetMetaData
爪哇
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
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("post_id");
rs.getInt("user_id");
}
SQL
ResultSetMetaData
爪哇
SELECT p.id
p.name
u.id
u.message
FROM POSTS p
JOIN USERS u
ON u.id = p.user_id
答案 4 :(得分:-2)
您可以通过按列索引获取数据而不是按列名获取数据来进一步简化这些操作。!!我们从DB检索的数据是按照列顺序按照select语句存储在结果集中的,所以不是根据列名获取数据,而是根据结果集中的列索引获取数据。
例如:
String query = " select age,num from table_abc";
ResultSet rs= statement.executeQuery(query);
while(rs.next){
int var1= rs.getInt(1);
int var2= rs.getInt(2);
}
这些将帮助您消除由于数据库表中类似的列名而产生的复杂性和混淆。
希望这些有帮助...
一切顺利...... !!