Поскольку внешний ключ company_id
не может быть null
, компания должна существовать в БД, и ее идентификатор должен быть известен, прежде чем вы сможете вставить пользователя.
ОБНОВЛЕНИЕ
Комувведите нового пользователя, вам нужно:
- имя пользователя
- адрес электронной почты
- название компании
Сначала мынеобходимо найти 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);
}
}
}