【问题标题】:Update with JDBC for multiple rows使用 JDBC 更新多行
【发布时间】:2011-12-28 10:59:51
【问题描述】:

我有一个非常简单的 SQL“更新表,其中 ID 在 (1,2,3)”

当我在做的时候

String sql = "update table where ID in (?)";
List<Integer> ids = new ArrayList();
ids.add(1);
ids.add(2);
ids.add(3);
jdbc.update(sql, new Object[] { ids });

我在输出中收到错误的 sql

update table where ID in ('1,2,3')

我怎样才能去掉这个额外的报价?

【问题讨论】:

    标签: java mysql sql jdbc


    【解决方案1】:

    很遗憾,您不能在PreparedStatement 中将Array 作为Parameter 传递。可以在这里找到类似的问题:

    PreparedStatement IN clause alternatives?

    您可以在这里找到一些替代方案:

    http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

    【讨论】:

      【解决方案2】:

      您的 SQL 语句需要采用以下形式:

      UPDATE table_name
      SET column1=?, column2=?,...
      WHERE some_column=some_value
      

      即注意

      • 您必须指定要更新的列
      • 对于您需要提供的每个值,您需要一个占位符? 符号
      • 对于每个值,您需要一个对应的setInt(pos, value) 调用

      查看PreparedStatement tutorial 了解更多信息。摘录如下:

      String updateString =
          "update " + dbName + ".COFFEES " +
          "set SALES = ? where COF_NAME = ?";
      updateSales = con.prepareStatement(updateString);
      updateSales.setInt(1, 100);
      ....
      

      【讨论】:

      • 他的问题不是SETs的陈述,他只是把他给出的例子搞砸了。
      猜你喜欢
      • 2014-07-27
      • 2018-04-10
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      相关资源
      最近更新 更多