JDBC PreparedStatement中“null原语”的解决方法?
使用原始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
对于此特定记录为null
是完全合理的。 毕竟,我曾经使用的每个RDBMS都允许数字(INT,LONG等)字段为NULLABLE …
那么解决方法是什么?
不要使用任何这些并使用setObject
,让JDBC驱动程序来管理null
值而不是你。
您可以使用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);
从这里取的例子。
您需要使用setNull()方法。 基于参数为null
或不检查您需要调用setNull()
(或) setInt()
。