Jdbc 将值数组设置为SQL查询

Jdbc 将值数组设置为SQL查询,jdbc,Jdbc,我使用的是JDBC,我必须将值数组设置为一列, 我知道它在Hibernate和Ibatis中工作,但要让它在纯JDBCSQL中工作似乎很困难 我有一个字符串值数组 names[] = new String[]{"A","B","C"}; 还有一个类似于 select * from emp where name in(?) 我尝试了pstmt.setObject(1,名称),但它不起作用。纯JDBC不支持这一点。您必须生成一个查询,以便在子句中为数组的每个元素包含一个占位符 Spring的JD

我使用的是JDBC,我必须将值数组设置为一列, 我知道它在Hibernate和Ibatis中工作,但要让它在纯JDBCSQL中工作似乎很困难

我有一个字符串值数组

names[] = new String[]{"A","B","C"};
还有一个类似于

select * from emp where name in(?)

我尝试了pstmt.setObject(1,名称),但它不起作用。

纯JDBC不支持这一点。您必须生成一个查询,以便在子句中为数组的每个元素包含一个占位符


Spring的JDBC助手类支持命名参数和您想要做的事情。

纯JDBC不支持这一点。您必须生成一个查询,以便在子句中为数组的每个元素包含一个占位符


Spring的JDBC helper类支持命名参数和您要执行的操作。

这将使用以下语法:

"SELECT * FROM emp WHERE name IN ( SELECT column_value FROM TABLE( ? ) )"

pmst.setArray( 1, conn.createArrayOf( "VARCHAR", names ) );

这将使用以下语法:

"SELECT * FROM emp WHERE name IN ( SELECT column_value FROM TABLE( ? ) )"

pmst.setArray( 1, conn.createArrayOf( "VARCHAR", names ) );

如果您动态创建查询字符串并为数组中的每个项添加?s,然后将其中的每个项绑定到您的查询,您可能会到达该位置。如果您动态创建查询字符串并为数组中的每个项添加?s,您可能会到达该位置,然后将它们中的每一个绑定到您的查询中。我认为JDBC现在支持它-请参阅我的答案!我想现在JDBC支持它了——看看我的答案!请注意,
createArrayOf
可能无法跨所有主要关系数据库工作。请参阅:有几种技巧可以让它与其他供应商一起使用,但这是一个麻烦,您需要为每个DBMS提供一个单独的案例……请注意,
createArrayOf
可能无法在所有主要的关系数据库中使用。请参阅:有几个技巧可以让它与其他供应商一起工作,但这是一个麻烦,您需要为每个DBMS提供一个单独的案例。。。