【问题标题】:Java PreparedStatement SyntaxJava PreparedStatement 语法
【发布时间】:2010-09-14 03:10:34
【问题描述】:

这是 java 中准备好的语句的正确语法吗:

INSERT INTO table (id, version, data)
  VALUES (?, ?, ?)
  ON DUPLICATE KEY UPDATE 
    data = IF(version > values(version), data, values(data)),
    version = IF(version > values(version), version, values(version))

我正在寻找利用 PreparedStatement 的 addBatch 从 Java 的 for 循环中插入或更新数百万行的最佳方法。

【问题讨论】:

  • 没有“Java 中准备好的语句的语法”。 SQL 中有一个用于准备好的语句的语法。对于 Java,它只是一个字符串。
  • 我在谈论问号和values(version)... 显然这是 sql 语法,但准备好的语句可以进行某种形式的解析,对吗?

标签: java sql syntax prepared-statement


【解决方案1】:

如果SQL语句正确,则需要如下包装:

String sql = ...
PreparedStatement prep;
prep = conn.prepareStatement(sql);
prep.setInt(1, x);
prep.setString(2, y);
prep.setString(3, z);
prep.execute();

要使用 addBatch,请使用:

String sql = ...
PreparedStatement prep;
prep = conn.prepareStatement(sql);
for (...) {
    prep.setInt(1, x);
    prep.setString(2, y);
    prep.setString(3, z);
    prep.addBatch();
}
prep.execute();

【讨论】:

  • Thomas,我得到了这一部分,但我的问题是,sql 语法是否正确.. 你知道准备好的语句如何解析问号.. 我只是想知道 values(data) 是否正确说use whatever value was passed to the data column
  • 我会继续为您提供答案,即使它没有回答我的确切问题。我想我原来的问题不是很清楚,这是我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2013-03-27
  • 1970-01-01
相关资源
最近更新 更多