如何为字符数组传递PreparedStatement setArray

use*_*491 7 java jdbc

我有一些JDBC代码如下:

String selectSQL = "SELECT * FROM DBUSER WHERE USER_ID = ? and PASSWORD = ?";

Integer userId = 1000;
char[] passwordString = new char[] { 't', 'e', 's', 't' };

PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setInt(1, 1001);
preparedStatement.setArray(2,... ??? // how to do this part?

// execute select SQL statement
ResultSet rs = preparedStatement.executeQuery();
Run Code Online (Sandbox Code Playgroud)

如何调用preparedStatement.setArray在查询中设置第二个参数?我不想在这里使用字符串参数来保护密码.

注意我正在使用Hypersonic DB,但如果这很有用,则计划移动到MySql.

Avi*_*gal 9

PreparedStatement #setArray收到一个java.sql.Array 首先你应该使用JDBC Conncetion的createArrayOf方法来创建数组,然后才能将它传递给它setArray.

由于该方法只接受Object[]您应该创建一个Character而不是char 的数组.

例如:

Character[] passwordString = new Character[] { 't', 'e', 's', 't' };
Array sqlArray = con.createArrayOf("CHAR", passwordString);
preparedStatement.setArray(2, sqlArray);
Run Code Online (Sandbox Code Playgroud)


Nid*_*nan 1

看看这段代码

final PreparedStatement statement = connection.prepareStatement(
        "SELECT my_column FROM my_table " + 
        "where search_column IN (SELECT * FROM unnest(?))"
);
final String[] values = getValues();
statement.setArray(1, connection.createArrayOf("text", values));
final ResultSet rs = statement.executeQuery();
try {
    while(rs.next()) {
        // do some...
    }
} finally {
    rs.close();
}
Run Code Online (Sandbox Code Playgroud)

另请查看这篇文章以供参考http://people.apache.org/~djd/derby/publishedapi/java/sql/PreparedStatement.html