Java 传递数据库中数字列的整数数组

Java 传递数据库中数字列的整数数组,java,oracle,Java,Oracle,我的查询看起来像是SELECT*fromtablename,其中id=? 对于id字段,我想传递数据库中编号字段的id数组 我已经创建了数字数组类型I数据库,当我将数组传递给我准备好的语句时,我得到以下错误 org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * from Tablename WHERE id= ?]; nested exceptio

我的查询看起来像是
SELECT*fromtablename,其中id=?

对于
id
字段,我想传递数据库中编号字段的id数组

我已经创建了数字数组类型
I
数据库,当我将数组传递给我准备好的语句时,我得到以下错误

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * from Tablename WHERE id= ?]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00932: inconsistent datatypes: expected NUMBER got schema.app_id

    at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:95)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springfra
您需要在查询中使用:

通过表集合表达式,您可以通知Oracle集合表达式的值应作为表处理,以便进行查询和DML操作。集合表达式可以是子查询、列、函数或集合构造函数。无论其形式如何,它都必须返回一个集合值,即类型为嵌套表或varray的值。提取集合元素的过程称为集合取消测试

因此,您需要将传递的集合(数组)转换为
in()
子句中子查询中的表:

SELECT * from TableName WHERE in (SELECT column_value FROM TABLE(?))
或通过连接:

SELECT t.*
FROM TABLE(?) i
JOIN TableName t
ON t.id = i.column_value

显示相关的Java代码。不能将int数组传递给此sql本机查询。您应该使用循环多次执行查询,并将结果存储到
对象[]【】
类型中。我不认为上下文切换在循环中为不同的ID多次运行此查询是一个好主意。我认为传递一个列表并在where子句中运行语句,如:“elect*from mytable where id IN(1,2,3,4,5)”,将获得更好的性能。。。您可以创建一个方法,将数组转换为csv字符串(或者已经有了come类,我不是Java guy tbh),我怀疑您已经非常接近了,只需要对查询进行一个小的调整,但是如果您包含Java代码,这将非常有帮助。要检查如何传递数组,我必须在()中选择查询where条件,但是我在in条件中传递的输入太大(因为oracle只接受小于1000的in条件值),这就是我尝试在oracle中创建数字类型数组表的地方,并使用oracle数组类型将整数数组传递给此in条件,但不起作用。感谢Alex的帮助,我将尝试并让您知道。