14

使用原始 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用于此特定记录,这是完全合理的。毕竟,我曾经使用过的每个 RDBMS 都允许数字(INT、LONG 等)字段为 NULLABLE ......

那么解决方法是什么?

4

3 回答 3

28

不要使用其中的任何一个,setObject而是使用,让 JDBC 驱动程序null代替您来管理这些值。

于 2013-07-15T14:49:43.897 回答
14

您可以使用该类的setNull(int parameterIndex, int sqlType)方法PreparedStatement

以下是如何使用它的示例:

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

示例取自这里

于 2013-07-15T14:47:10.130 回答
3

您需要使用setNull()方法。根据参数是否null检查您是否需要调用setNull()(or) setInt()

于 2013-07-15T14:46:07.990 回答