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

如何在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

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号