为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Spring中编写一个查询,将记录插入到Mysql数据库的2个表中

如何在Spring中编写一个查询,将记录插入到Mysql数据库的2个表中

DIEA 2023-11-10 16:54:58
我想编写一个查询将数据插入两个表中。我将数据插入到两个表中,称为User和company。 User有外键company _id。表结构如下用户表int user_id;(AI)int 公司_id;(外键)字符串用户名;字符串 user_email;公司表int company_id;(AI)字符串公司名称;-void insert(String user){    String query="insert into user(user_name,user_email,company_id,company_name) values    (variable,variable, variable, variable)";    //code to map using put method}我收到错误company_id cannot be null.
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

由于外键company_id不能是null,公司必须存在于数据库中,并且在插入用户之前必须知道它的 id。

更新

要插入新用户,您需要:

  • 用户名

  • 电子邮件地址

  • 公司名称

我们首先需要搜索company_id给定的公司名称。如果在数据库中找不到该公司,则会插入一个新公司。

public void insertUser(String userName, String userEmail, String companyName)

        throws SQLException {

    int companyId = getOrInsertCompany(companyName);

    try (PreparedStatement stmt = cnt.prepareStatement(

            "insert into User(company_id,user_name,user_email)"

            + " values(?,?,?)")) {

        stmt.setInt(1, companyId);

        stmt.setString(1, userName);

        stmt.setString(1, userEmail);

        stmt.executeUpdate();

    }

}


private int getOrInsertCompany(String companyName) throws SQLException {

    try (PreparedStatement stmt = cnt.prepareStatement(

            "select company_id from Company where company_name=?")) {

        stmt.setString(1, companyName);

        try (ResultSet rs = stmt.executeQuery()) {

            if (rs.next()) {

                return rs.getInt(1);

            }

        }

    }

    // the company was not found; insert it

    try (PreparedStatement stmt = cnt.prepareStatement(

            "insert into Company(company_name) values(?)")) {

        stmt.setString(1, companyName);

        stmt.execute();

        try (ResultSet rs = stmt.getGeneratedKeys()) {

            if (!rs.next()) {

                throw new SQLException(

                        "Could not get generated keys");

            }

            return rs.getInt(1);

        }

    }

}



查看完整回答
反对 回复 2023-11-10
  • 1 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信