【问题标题】:How to get value from reference table based on foreign key?如何根据外键从引用表中获取值?
【发布时间】:2017-06-17 04:24:29
【问题描述】:

我有两个表,外键关联它们: enter image description here

我已使用 SQL 查询从两个表中检索值:

User u = new User();

String sql = "SELECT * FROM user INNER JOIN account ON user.id = account.user WHERE user.id = 1 ";

try {
        Statement stm = con.createStatement();

        ResultSet rsu = stm.executeQuery(sql);

        while(rsu.next()){
            u.setFname(rsu.getString("fname"));
            u.setLname(rsu.getString("lname"));
            u.setMname(rsu.getString("mname"));
            u.setGender(rsu.getString("gender"));
            u.setAddress(rsu.getString("address"));
            u.setCitizenship(rsu.getLong("citizenship"));

            /**
            *
            *   Here i want to get values of account table and set it on 
            *   user object to return u
            *
            */
        }

        return u;

    } catch (SQLException e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 假设您可以使用列名直接访问结果集值。

标签: java mysql jdbc relation


【解决方案1】:

很容易得到表的值。您需要做的就是提供您已经在 ResultSet 中获得的帐户表的列名。

u.setAccountID(rsu.getLong("accId"));

这里的帐户 ID 存储在您已经从结果集中的数据库中检索到的结果集对象中

【讨论】:

    【解决方案2】:

    1) 在您的 SQL 中包含帐户数据,如下所示:

    SELECT user.*, account.* FROM user INNER JOIN account ON user.id = account.user WHERE user.id = 1

    2) 像访问用户字段一样访问帐户字段:

    u.setAccountType(rsu.getString("accountType")); u.setAccountNo(rsu.getString("accountNo"));

    3) 确保在finally 块中关闭Statement

    4) 您不需要迭代整个结果集,因为您只需要一条记录。只需将while 替换为if

    【讨论】:

    • 没有工作......它在 u.setAccountType(rsu.getString("accountType")); 行显示错误
    • 错误是什么。在这里,我只是猜测您在 User 对象上有 setAccountType 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多