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); ... 

在这里,如果someStringnull ,那很好 – 字符串可以为空。 但是如果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()