使用原始JDBC时,您可以参数化PreparedStatement
,如下所示:
PreparedStatement statement = connection.prepareStatement(someSQLString);
String someString = getSomeString();
Integer int = getSomeInteger();
statement.setString(1, someString);
statement.setLong(2, 5L);
statement.setInt(3, int);
...
在这里,如果someString
是null
,那很好 - 字符串可以为空。但如果getSomeInteger()
返回null
,我们就会遇到问题。
PreparedStatement#setInt(int,int)
将原始int
设置为值,因此不能为null
。
但是,我可能希望上面第3列的值对于此特定记录为null
非常合理。毕竟,我曾经使用的每个RDBMS都允许数字(INT,LONG等)字段为NULLABLE ...
那么解决方法是什么?
答案 0 :(得分:17)
不要使用其中任何一个并使用setObject
代替,让JDBC驱动程序来管理null
值,而不是你。
答案 1 :(得分:9)
您可以使用PreparedStatement
类的setNull(int parameterIndex, int sqlType)方法。
以下是如何使用它的示例:
String query =
"insert into nullable_table(id,string_column, int_column) values(?, ?, ?)";
// create PrepareStatement object
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, id);
pstmt.setNull(2, java.sql.Types.VARCHAR);
pstmt.setNull(3, java.sql.Types.INTEGER);
取自here。
的示例答案 2 :(得分:2)
您需要使用setNull()方法。根据参数null
或不检查,您需要致电setNull()
(或)setInt()
。