当前位置: 首页 > 面试题库 >

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

翟淮晨
2023-03-14
问题内容

我在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 (?,?)

并使用循环传递值。

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


 类似资料:
  • 问题内容: 对不起这个基本问题。我想将一个切片作为参数传递给。像这样: 结果将是,但这显然不起作用。 (我要格式化的字符串比这要复杂的多,因此,简单的串联是不会做到的:) 所以问题是:如果我有数组,如何将其作为单独的参数传递给?或者:我可以调用在Go中传递参数列表的函数吗? 问题答案: 正如您在IRC上发现的那样,它将起作用: 您的原始代码无法正常工作,因为接受a 并且无法将其隐式或显式转换为该类

  • //在这里写什么都行

  • 问题内容: 是否可以使用反射API将参数传递给Java中的方法? 是否可以使用诸如AspectJ之类的AOP库来实现这一目标? 我在Android上运行。 。 问题答案: 是否可以使用诸如AspectJ之类的AOP库来实现这一目标? 当然可以。这是AspectJ中典型的初学者练习,如下所示: 现在,您只需要编写一个方面即可拦截所有方法执行(以及可选的构造函数执行,如下所示): 运行时,此方面将打印

  • 问题内容: 我想使用数组作为参数调用一个函数: 有路过的内容的一种更好的方式进入? 问题答案: const args = [‘p0’, ‘p1’, ‘p2’]; call_me.apply(this, args); 请参阅MDN文档。 如果环境支持ECMAScript6,则可以改用传播参数:

  • 问题内容: 请告知如何将参数传递给使用的函数。 我的例子是不正确的。 问题答案: 您需要创建一个匿名函数,以便不会立即执行实际函数。

  • 问题内容: 我正在尝试使用ng-class的angular。我有一个函数,它根据我们发送的参数返回类。我该如何实现呢? 这是我尝试过的: 并在控制器中: 只需返回一个字符串即可。但是当我添加此anfular.forEach时,它停止了。在调试器中,循环工作正常并返回正确的数据。 我知道可以通过过滤器来解决,但我只想这样做。 问题答案: 您不应该使用单个大括号,只需删除它们即可使用: 但是,对于您的