如何使用arraylist作为预准备语句参数

Tho*_*ady 30 java arraylist prepared-statement

我已经看过了,并且无法找到我正在接受的以下挑战的答案.这似乎很简单但我无法解决它.

我有一个ArrayList类型为Long- > 的记录ID ArrayList<Long>.我想使用此记录ID列表来从另​​一个表中选择行.到现在为止还挺好.现在迎接挑战......

a)我正在使用预准备语句,使用ArrayListas输入从表中选择数据.

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");
Run Code Online (Sandbox Code Playgroud)

关于上述问题 - 如何定义参数?以上对于ArrayList类型参数似乎不正确.

b)在为预准备语句设置参数值时,我也遇到了问题.没有设置ArrayList类型值的方法,我看不到其他可行的选项.

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 
Run Code Online (Sandbox Code Playgroud)

我们非常感谢您给我的任何帮助或指导.

谢谢.

Yog*_*ngh 52

您可能想要使用setArray下面javadoc中提到的方法:

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setArray(int,java.sql.Array)

示例代码:

PreparedStatement pstmt = 
                conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)

  • 根据使用阵列的建议回复您(和TNI).不幸的是,由于我们将MySQL作为我们的数据库,我无法使用它.MySQL不支持sql数组.这太糟糕了,因为这也解决了我的需求.谢谢你的帮助. (10认同)
  • 这在Oracle数据库上不起作用,因为未实现createArrayOf (3认同)
  • 对于上面的评论;还没有解决我收到错误的原因,但是使用`SELECT * FROM employee WHERE id = ANY (?)` 确实有效(对我来说)。 (2认同)

Ami*_*bey 22

如果你有ArrayList然后转换成Array [Object]

ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt = 
            conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)