JDBC PreparedStatement中“null原语”的解决方法?

时间:2013-07-15 14:44:54

标签: java sql jdbc prepared-statement nullable

使用原始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 ...

那么解决方法是什么?

3 个答案:

答案 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()