在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 

PreparedStatement pst = conn.prepareStatement(query);

所以查询成为 - 从userinfo中选择*,其中first(?,?)

并使用循环传递值。

对于Oracle -

 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); 

错误信息非常清楚。 MySQL不支持自定义数据类型。

目前MySQL仅支持:

  1. 数字类型
  2. 日期和时间类型
  3. 字符串类型

或者,您可以将每个输入值用作MySQLIN函数的一组值。

更改您的JAVA代码如下:

 StringBuilder sbSql = new StringBuilder( 1024 ); sbSql.append( "select * from userinfo where firstname in(" ); for( int i=0; i < Parameter.length; i++ ) { if( i > 0 ) sbSql.append( "," ); sbSql.append( " ?" ); } // for sbSql.append( " )" ); PreparedStatement pst = conn.prepareStatement( sbSql.toString() ); for( int i=0; i < Parameter.length; i++ ) { pst.setString( i+1, Parameter[ i ] ); } // for ResultSet rs = pst.executeQuery();