以下陈述之间有什么区别。
PreparedStatement.setNull(1, java.sql.Types.NULL);
和
PreparedStatement.setNull(1, java.sql.Types.INTEGER);
答案 0 :(得分:1)
第一个指示驱动程序将null
值发送为NULL
- 类型,而另一个指定为INTEGER
- 类型。在? IS NULL OR someIntegerColumn = ?
等条件下,有时需要这样做。第一个参数是NULL
- 类型,而第二个参数是INTEGER
类型。
但是,确切的区别取决于数据库驱动程序:某些数据库/驱动程序始终使用服务器在准备时指定的类型(并且驱动程序从其他类型转换为该类型),而其他数据库/驱动程序要求或允许在类型指定的应用程序端(数据库然后转换为实际的本地类型)。如果服务器不支持服务器端预准备语句,则甚至可能需要这样做。
对于指定类型实际上可能存在微妙的含义:可能一个导致转换错误,而另一个不导致,或者后续转换由于类型转换规则而表现不同。实际上我并没有意识到这种情况。