问题描述
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()
返回null
的情况下,如何将品种ID保留为空?
Java不允许我设置stmt.setLong(5,null);
,因为我理解long
不知道null
。
但是,那是什么优雅的方法呢?
解决方法
@speendo-请使用java.sql.Types如下使用PreparedStatement的setNull方法:
if (dog.getBreed() != null) {
stmt.setLong(5,dog.getBreed().getId());
} else {
// leave breed_id field empty
stmt.setNull(5,Types.NULL);
}