在prepare语句中传递数组参数 – 获取“java.sql.SQLFeatureNotSupportedException”

我在我的prepare语句中遇到错误java.sql.sqlFeatureNotSupportedException.我正在使用MysqL数据库.

以下是我的代码.

class tmp {
public static void main(String arg[]) {

    try {
        Class.forName("com.MysqL.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                "jdbc:MysqL://localhost/sample", "root", "root");
        PreparedStatement pst = conn
                .prepareStatement("select * from userinfo where firstname in(?)");

        String[] Parameter = { "user1", "Administrator" };
        Array sqlArray = conn.createArrayOf("VARCHAR", Parameter);
        pst.setArray(1, sqlArray);
        ResultSet rs = pst.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getInt(1));
        }
    } catch (Exception e) {
        e.printstacktrace();
        }
    }
}

解决方法:

对于MysqL

MysqL中无法设置数组.

而不是你可以在循环中形成(?,?,..)的查询以及设置值的相同方式.

String[] Parameter = { "user1", "Administrator" };
String query = "select * from userinfo where firstname in (";
String temp = "";

for(i = 0; i < Parameter.length; i++) {
  temp += ",?";
}

temp = temp.replaceFirst(",", "");
temp += ")";
query = query + temp;

PreparedStatement pst = conn.prepareStatement(query);

所以查询变成了

select * from userinfo where firstname in (?,?)

并使用循环传递值.

对于甲骨文 –

ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("CHAR_ARRAY", conn);
String[] Parameter = { "user1", "Administrator" };
java.sql.Array sqlArray = new oracle.sql.ARRAY(arrayDescriptor, conn, content);
.
.
pstmt.setArray(1, sqlArray);

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...