gpt4 book ai didi

java - ON DUPLICATE KEY UPDATE 的准备语句语法(参数数量错误)

转载 作者:可可西里 更新时间:2023-11-01 07:45:59 25 4
gpt4 key购买 nike

这是我正在尝试做的事情。如果主键(entity_id)存在,我想插入到这个表中或更新记录。我只是遇到 SQL 语法问题。它不会让我拥有比第一个“VALUES”数量更多的参数,所以我收到以下错误:

参数索引超出范围(7 > 参数个数,即 6)。

int insertOrUpdateSuccess = MyDBSyncher.UPDATE("INSERT INTO " + DB_NAME + ".entities " +
"(`entity_id`, `wai_type`, `wai_id`, `character_id`, `looted`, `creation_time`) " +
"VALUES ((?), (?), (?), (?), (?), (?)) " +
"ON DUPLICATE KEY UPDATE " +
"`wai_type`='(?)', `wai_id`='(?)', `character_id`='(?)', `looted`='(?)'",
new String[]{tmpEntityId, values[0], values[1], values[2], values[3], values[4],
values[0], values[1], values[2], values[3]});

This我认为与我要问的有点相似,但我无法根据我的需要来解释它。很抱歉可能会重复发布。

哦,这是我代码中的 UPDATE() 函数:

public static int UPDATE(String updateStatement, String[] params){
try {
if(!conn.isClosed()) {
logger.trace("Successfully connected to MySQL server using TCP/IP - " + conn);

stat = conn.prepareStatement(updateStatement);
for (int i = 0; i < params.length; i++){
stat.setString(i+1, params[i]);
}
return stat.executeUpdate();
}
} catch(SQLException eSQL) {
logger.fatal(eSQL.getMessage());
}
return -1;
}

感谢您对此的任何帮助。 :)

最佳答案

为什么不直接将绑定(bind)参数放在查询后的重复值中:

INSERT INTO mytable (col1, col2, col3) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE col1=?, col2=?, col3=?;

可以重写为:

INSERT INTO mytable (col1, col2, col3) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE col1=VALUES(col1), col2=VALUES(col2), col3=VALUES(col3);

IMO 人们应该更喜欢第二而不是第一,因为:

  • 不对查询中的“ON DUPLICATE KEY UPDATE”部分使用绑定(bind)参数意味着您不必编写额外的代码(或迭代)来绑定(bind)它们

  • 编写更少的代码意味着出现绑定(bind)错误(拼写错误等)的可能性更少

  • 它具有更好的可读性

关于java - ON DUPLICATE KEY UPDATE 的准备语句语法(参数数量错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com