小编典典

使用JDBC从多个表中进行选择时,如何识别列?

sql

我在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")

java.sql.SQLException: Column 'posts.id' not found.

如何使用JDBC和JavaDB / Derby作为数据库从上述SQL查询中获取值?

使用检索值时,如何区分和表中的id列?users``posts``ResultSet


阅读 212

收藏
2021-04-22

共1个答案

小编典典

您正在尝试检索该id值,但是您正在使用“ posts.id”来引用它。

您需要的只是列名或别名,而不是表名:

ResultSet rs = // SQL
if(rs.next()) {
  rs.getInt("id");
  ...
}

如果您的列名称本身是“ posts.id”,那会起作用,但是如果您选择更新表,我建议使用下划线(_)而不是句点。

但是我在两个表中都有一个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");
  ...
}
2021-04-22