我有这样的查询 - select * from tbl where ... and colname in (2,3,4)
当我在 Java 中使用 PreparedStatement 准备查询(... ' colname in (?)' )时,我应该调用什么 setter 方法来设置这些整数?整数在 int 数组中可用,并且大小不同。如果重要的话,数据库是 MySQL 并且有问题的列是 int 类型。
我有这样的查询 - select * from tbl where ... and colname in (2,3,4)
当我在 Java 中使用 PreparedStatement 准备查询(... ' colname in (?)' )时,我应该调用什么 setter 方法来设置这些整数?整数在 int 数组中可用,并且大小不同。如果重要的话,数据库是 MySQL 并且有问题的列是 int 类型。
你可以使用另一种语法
WHERE colname = ANY (?)
并调用 PreparedStatement.setArray()。您必须提供 java.sql.Array 的实例作为参数。ANY 代替 IN 的一个优点是,您可以传递一个空数组而不会导致 SQL 语法错误。
作为学习解释的附录:
创建一个数组可能很棘手。
JDK 1.6 及更高版本的 Connection 中有一个 creator 方法。 http://download.java.net/jdk7/docs/api/java/sql/Connection.html#createArrayOf(java.lang.String,%20java.lang.Object[])
由于 JDK1.6 是最新的稳定版本,您的 JDBC 驱动程序可能不支持它。
您可以尝试创建自己的 Array 实现,但这可能不适用于所有 JDBC 连接器实现。