我想编写一个查询将数据插入到两个表中。
我正在将数据插入到两个表中,即User
和company
。User
有外键company _id
。台面结构
用户表
user_id;(AI)
公司表
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.
发布于 2019-10-18 05:39:44
这可能是因为您的company_id
在user
表中被设置为not null
。如果希望外键为空,则必须从表创建语句中的not null
列中删除user
。否则,您必须为外键提供一个值。
发布于 2019-10-18 05:40:54
由于外键company_id
不能是null
,所以公司必须存在于DB中,并且在插入用户之前必须知道它的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);
}
}
}
发布于 2019-10-18 07:22:21
检查NULL约束
SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_name = 'user' and column_name = 'company_id';
如果is_nullable的值为NO
,则不能插入空值。
要么将约束更改为NULL
,要么验证company_id的值(而不是空值)。
将约束从NULL更改为NULL的语法
ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL
https://stackoverflow.com/questions/58444267
复制相似问题