PreparedStatement setnull方法中Types.INTEGER和Types.NULL之间的区别

时间:2014-05-22 08:22:27

标签: java sql jdbc

以下陈述之间有什么区别。

PreparedStatement.setNull(1, java.sql.Types.NULL);

PreparedStatement.setNull(1, java.sql.Types.INTEGER);

1 个答案:

答案 0 :(得分:1)

第一个指示驱动程序将null值发送为NULL - 类型,而另一个指定为INTEGER - 类型。在? IS NULL OR someIntegerColumn = ?等条件下,有时需要这样做。第一个参数是NULL - 类型,而第二个参数是INTEGER类型。

但是,确切的区别取决于数据库驱动程序:某些数据库/驱动程序始终使用服务器在准备时指定的类型(并且驱动程序从其他类型转换为该类型),而其他数据库/驱动程序要求或允许在类型指定的应用程序端(数据库然后转换为实际的本地类型)。如果服务器不支持服务器端预准备语句,则甚至可能需要这样做。

对于指定类型实际上可能存在微妙的含义:可能一个导致转换错误,而另一个不导致,或者后续转换由于类型转换规则而表现不同。实际上我并没有意识到这种情况。