Java JDBC MySQL ArrayList <string>到preparedStatement.setArray(x,y)的java.sql.Array

时间:2016-08-07 09:05:22

标签: java mysql jdbc

努力在网上找到任何有效的代码。想要:Java JDBC MySQL ArrayList成java.sql.Array,用于preparedStatement.setArray(x,y)。基本上然后在WHERE语句中比较... WHERE col1 =(a或b或c等)我相信是.setArray在预准备语句中所做的。

抛出错误的当前代码;

import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;    

ArrayList<String> myArrayList = new ArrayList<String>();
myArrayList .add("one");
myArrayList .add("two");

PreparedStatement preparedStatement = con.prepareStatement(selectSQL);
String[] data = myArrayList .toArray(new String[myArrayList .size()]);
java.sql.Array myArrayListSQLArray = con.createArrayOf("VARCHAR", data);
preparedStatement.setArray(1, myArrayListSQLArray );

正在抛出的错误;

java.lang.AbstractMethodError: com.mysql.jdbc.Connection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;

指向该行;

java.sql.Array myArrayListSQLArray = con.createArrayOf("VARCHAR", data);

任何指针?

更新 这就是我想要做的事情;

我有一个非常复杂的SQL查询,它有效地工作,虽然它没有通过PreparedStatement安全网解析某些信息。下面的代码显示了手动输入或通过未准备的语句代码

时的SQL语句

代码;

SELECT Col1, Col2 FROM my_table WHERE Col1 = 'abc' OR Col1 =  'def' OR Col1 = etc....;

挑战是Col1的WHERE子句中的项目具有未知数量的OR比较。我可以使用ArrayList轻松构建SQL语句的这一部分,然后将其添加到SQL Select字符串中,如下所示;

String selectSQL = "SELECT Col1, Col2 FROM my_table WHERE (" + whereClauseAllString + ") ;";

尽管完全绕开了preparedStatement的安全方面。将变量'whereClauseAllString'传递给preparedStatement时,如下所示,这自然不起作用,因为所有'最终都被转义;

preparedStatement.setString(1, whereClauseAllString);

问题是,完成此类查询的最佳方法是什么?我已经测试了各种方法,由于语句中需要一定数量的未知OR检查,所有这些方法都不起作用。

更新2 在所提供的链接上测试任何选项后,没有任何作用。建议的解决方案,如下所示,仍然会引起与此问题前面提到的相同的错误;

PreparedStatement statement = connection.prepareStatement(
        "SELECT my_column FROM my_table where search_column = ANY (?)"
String[] values = getValues();
statement.setArray(1, connection.createArrayOf("text", values));

任何想法为什么?

0 个答案:

没有答案