Java PreparedStatement::setInt null输入的预期效果
根据该准则:Java PreparedStatement::setInt null输入的预期效果,java,prepared-statement,autoboxing,Java,Prepared Statement,Autoboxing,根据该准则: try(PreparedStatement p_stmt = connection.prepareStatement(sql)) { p_stmt.setString(1, null); ... } 相当于: try(PreparedStatement p_stmt = connection.prepareStatement(sql)) { p_stmt.setNull(1, java.sql.Types.VARCHAR); ... } 我的问题
try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
p_stmt.setString(1, null);
...
}
相当于:
try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
p_stmt.setNull(1, java.sql.Types.VARCHAR);
...
}
我的问题是,这与int
/Integer
相同吗??换句话说,此代码将执行什么操作:
try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
Integer i = null;
p_stmt.setInt(1, i);
...
}
setInt()
p_stmt.setInt(1, i);
编译为
p_stmt.setInt(1, i.intValue());
由于i
引用的是null
,因此将得到NullPointerException
这将在中进行更详细的解释
在运行时,取消装箱转换按如下方式进行:
- [……]
- 如果
r
是类型为Integer
的引用,则取消装箱转换将r
转换为r.intValue()
- 如果
r
为null
,则取消装箱转换将引发NullPointerException
在你自己的链接中回答这个问题。