努力在网上找到任何有效的代码。想要: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));
任何想法为什么?