jdbcTemplate - 将字段留空
jdbcTemplate - leave field empty
我有一个像这样生成的 H2 SQL 数据库:
CREATE TABLE IF NOT EXISTS dog
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
...
breed_id BIGINT, -- references to breed(id) (see next line
FOREIGN KEY (breed_id) REFERENCES breed(id)
);
请注意 breed_id
是可选的。
为了在这个数据库中存储数据,我使用类似
的东西
@Override
public Dog save(Dog dog) {
final String sql =
"INSERT INTO " +
TABLE_NAME +
" (name, [...], breed_id)" +
"VALUES (?, [...], ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, dog.getName());
[...]
if (dog.getBreed() != null) {
stmt.setLong(5, dog.getBreed().getId());
} else {
// leave breed_id field empty
}
return stmt;
}, keyHolder);
breed.setId(((Number)keyHolder.getKeys().get("id")).longValue());
return breed;
}
我的问题是,如果 dog.getBreed()
returns null
,如何将 breed_id 字段留空?
Java 不会让我设置 stmt.setLong(5, null);
我理解为 long
不知道 null
.
但是,那么优雅的方法是什么?
@speendo - 请使用 PreparedStatement 的 setNull 方法并使用 java.sql.Types,如下所示:
if (dog.getBreed() != null) {
stmt.setLong(5, dog.getBreed().getId());
} else {
// leave breed_id field empty
stmt.setNull(5, Types.NULL);
}
我有一个像这样生成的 H2 SQL 数据库:
CREATE TABLE IF NOT EXISTS dog
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
...
breed_id BIGINT, -- references to breed(id) (see next line
FOREIGN KEY (breed_id) REFERENCES breed(id)
);
请注意 breed_id
是可选的。
为了在这个数据库中存储数据,我使用类似
的东西@Override
public Dog save(Dog dog) {
final String sql =
"INSERT INTO " +
TABLE_NAME +
" (name, [...], breed_id)" +
"VALUES (?, [...], ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, dog.getName());
[...]
if (dog.getBreed() != null) {
stmt.setLong(5, dog.getBreed().getId());
} else {
// leave breed_id field empty
}
return stmt;
}, keyHolder);
breed.setId(((Number)keyHolder.getKeys().get("id")).longValue());
return breed;
}
我的问题是,如果 dog.getBreed()
returns null
,如何将 breed_id 字段留空?
Java 不会让我设置 stmt.setLong(5, null);
我理解为 long
不知道 null
.
但是,那么优雅的方法是什么?
@speendo - 请使用 PreparedStatement 的 setNull 方法并使用 java.sql.Types,如下所示:
if (dog.getBreed() != null) {
stmt.setLong(5, dog.getBreed().getId());
} else {
// leave breed_id field empty
stmt.setNull(5, Types.NULL);
}