我在id列上加入了两个表,它们看起来像:
+-------+ | 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"):
SQLException
rs.getInt("posts.id")
java.sql.SQLException: Column 'posts.id' not found.
如何使用JDBC和JavaDB / Derby作为数据库从上述SQL查询中获取值?
使用检索值时,如何区分和表中的id列?users``posts``ResultSet
id
users``posts``ResultSet
您正在尝试检索该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"); ... }