Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring中编写一个查询,将记录插入Mysql数据库的2个表中_Java_Mysql_Sql_Jdbc - Fatal编程技术网

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

Java 如何在spring中编写一个查询,将记录插入Mysql数据库的2个表中,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我想写一个查询,将数据插入两个表中 我正在将数据插入两个表中,即User和company。 用户具有外键公司id。表结构已给出 用户表 int用户标识;(AI) 国际公司id;(外键) 字符串用户名 字符串用户_电子邮件 公司表 国际公司id;(AI) 字符串公司名称 - 我犯了一个错误 company_id cannot be null. 这可能是因为在user表中,您的company\u id设置为notnull。如果希望外键为空,则必须从user表的表创建语句中的company\

我想写一个查询,将数据插入两个表中

我正在将数据插入两个表中,即
User
company
用户
具有外键
公司id
。表结构已给出

用户表

  • int用户标识;(AI)
  • 国际公司id;(外键)
  • 字符串用户名
  • 字符串用户_电子邮件
公司表

  • 国际公司id;(AI)
  • 字符串公司名称
-

我犯了一个错误

company_id cannot be null.

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

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

更新

要插入新用户,您需要:

  • 用户名
  • 电子邮件地址
  • 公司名称
我们首先需要在
公司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);
        }
    }
}

检查notnull约束

SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_name = 'user' and column_name = 'company_id';
如果is_nullable的值为
NO
,则不能插入null值

或者,将约束更改为
NULL
,或者验证公司id的值(非NULL值)

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

ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL

请编辑你的问题,这样问题就清楚了。现在不可读。谢谢@Anna编辑问题。公司id为fk,所以它不是空的。所以请让我知道查询更改公司id为fk,所以它不是空的。所以请让我知道查询更改公司id为fk,所以它不是空的。所以请让我知道查询changes@Minakshi你需要三个,让我知道如何写查询,然后我们不需要有足够的信息完全回答这个问题:什么是模式,如何分配ID?自动递增?序列?它的简单数据库我有更新的信息(AI)。。没有序列。。。
ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL