首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在spring中编写将记录插入Mysql数据库中的两个表的查询

如何在spring中编写将记录插入Mysql数据库中的两个表的查询
EN

Stack Overflow用户
提问于 2019-10-18 05:07:05
回答 3查看 97关注 0票数 0

我想编写一个查询将数据插入到两个表中。

我正在将数据插入到两个表中,即UsercompanyUser有外键company _id。台面结构

用户表

user_id;(AI)

  • int;(外键)

  • 字符串user_name;

  • String user_email;

公司表

company_id;(AI)

  • String company_name;

  • int

-

代码语言:javascript
运行
复制
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
}

我搞错了

代码语言:javascript
运行
复制
company_id cannot be null.
EN

回答 3

Stack Overflow用户

发布于 2019-10-18 05:39:44

这可能是因为您的company_iduser表中被设置为not null。如果希望外键为空,则必须从表创建语句中的not null列中删除user。否则,您必须为外键提供一个值。

票数 0
EN

Stack Overflow用户

发布于 2019-10-18 05:40:54

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

更新

要插入需要的新用户,请执行以下操作:

  • a用户名
  • 电子邮件地址
  • 公司名称

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

代码语言:javascript
运行
复制
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);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-10-18 07:22:21

检查NULL约束

代码语言:javascript
运行
复制
SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_name = 'user' and column_name = 'company_id';

如果is_nullable的值为NO,则不能插入空值。

要么将约束更改为NULL,要么验证company_id的值(而不是空值)。

将约束从NULL更改为NULL的语法

代码语言:javascript
运行
复制
ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58444267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档