Java、JDBC INSERT ON DUPLICATE KEY UPDATE 通配符

2024-01-06

我有一个下一个 SQL 查询:

const val INSERT_OR_UPDATE_ITEM_SQL = "" +
            "INSERT INTO `items` (owner_id, object_id, item_id, count, enchant_level, item_location, item_location_data, custom_type1, custom_type2, duration_left, create_time)" +
            "VALUES (?,?,?,?,?,?,?,?,?,?,?) " +
            "ON DUPLICATE KEY UPDATE owner_id=?,object_id=?,item_id=?,count=?,enchant_level=?,item_location=?,item_location_data=?,custom_type1=?,custom_type2=?,duration_left=?,create_time=?"

这是PreparedStatement的准备:

statement.setString(1, item.ownerId)
statement.setInt(2, item.objectId)
statement.setInt(3, item.template.id)
statement.setInt(4, item.count)
statement.setInt(5, item.enchantLevel)
statement.setString(6, item.itemLocation.name)
statement.setInt(7, item.itemLocationData)
statement.setInt(8, item.customType1)
statement.setInt(9, item.customType2)
statement.setInt(10, item.durationLeft)
statement.setLong(11, item.createTime)

这里的问题是当我尝试执行查询时:

Exception in thread "main" java.sql.SQLTransientConnectionException: (conn=352) Parameter at position 12 is not set

这是因为我有 22 个问题标记,而不是 11 个(因为 ON CONFLICT UPDATE)

我的简单任务是插入或更新


正如您的查询所示,(某些)参数需要传递两次(一次用于插入,另一次用于更新)。 MySQL 提供the VALUES(...)功能 https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_values通过更新子句中的列名访问插入值 - 这正是为了省去您的麻烦。

另外:UPDATE如果子句仅涉及非主键列而不是所有列,则它的表达效果会更好。

假设您的表有列owner_id, object_id, item_id, cnt, enchant_level其中前三列是主键:

insert into items (owner_id, object_id, item_id, cnt, enchant_level)
values (?, ?, ?, ?, ?)
on duplicate key update 
set cnt = values(cnt), 
    enchant_level = values(enchant_level)

或者,如果您运行的是 MySQL 8.0.19 或更高版本,您可以使用新的基于别名的语法(values()在 MySQL 中是一个不幸的名称选择,因为它在某种程度上与同名 SQL 标准行构造函数冲突):

insert into items (owner_id, object_id, item_id, cnt, enchant_level)
values (?, ?, ?, ?, ?) v
on duplicate key update 
set cnt = v.cnt,
    enchant_level = v.enchant_level
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java、JDBC INSERT ON DUPLICATE KEY UPDATE 通配符 的相关文章

  • 单击链接时如何将另一个 JSP 页面注入到

    我在一个JSP页面中有两个不同的部分 其中一个包含链接菜单 单击时 div2 id content 会相应加载不同的页面 我正在做类似的事情 div ul class navbar li a href Login jsp Login a l
  • 如何测试 Jersey REST Web 服务?

    我已经编写了一个 Restful Web 服务 并且必须使用 JUnit4 对其进行测试 我已经使用 Jersey Client 编写了一个客户端 但想知道我是否只能使用 junit4 测试我的服务 至少有人可以帮我提供样品吗 我的休息服务
  • Java 8 中异常类型推断的一个独特功能

    在为该网站上的另一个答案编写代码时 我遇到了这个特性 static void testSneaky final Exception e new Exception sneakyThrow e no problems here nonSnea
  • 如何在Java中使用我的密码加密和解密字符串(PC而非移动平台)? [复制]

    这个问题在这里已经有答案了 我想加密一个字符串然后将其放入文件中 当我想要的时候也想解密它 我不需要很强的安全性 我只是想让其他人更难获取我的数据 我尝试了几种方法 这是这些 Md5加密 如何在 Android 中对字符串进行哈希处理 ht
  • JTree 避免重新加载后崩溃

    我正在尝试找到解决崩溃问题的方法JTree重新加载后 情况 JTree Office A Office A 1 Office A 1 1 Office A 1 2 Office B Office B 1 Office B 1 1 Offic
  • Java JNDI 名称 java:/

    我正在遵循教程 https docs oracle com javase tutorial jndi index html https docs oracle com javase tutorial jndi index html 我的冒险
  • 在Java中读取制表符分隔的文件

    我有以下代码来读取 Java 中的制表符分隔文件 while str in readLine null if str trim length 0 continue String values str split t System out p
  • 如何在不使用反射的情况下查看对象是否是数组?

    在Java中如何在不使用反射的情况下查看对象是否是数组 如何在不使用反射的情况下迭代所有项目 我使用 Google GWT 所以不允许我使用反射 我很想在不使用反射的情况下实现以下方法 private boolean isArray fin
  • 如何读取 sql 查询到 pandas dataframe / python / django

    我在下面使用这个views py获取应用程序 from django db import connection def test request cursor connection cursor sql SELECT x n from ta
  • Java J文件选择器

    我希望能够控制外观JFileChooser 我特别想保存如何JFileChooser上次显示时显示 我想保存它是否在详细信息 列表视图中使用以及列表被排序的列 例如 大小或修改日期 我知道有很多关于JFileChooser但我一直没能找到我
  • Java 7 中新的 JNLP 缺少项目警告是怎么回事?

    从 Java 6 切换到 Java 7 后 我的 JNLP 仍然工作正常 但它现在抛出一系列如下错误 Missing Application Name manifest attribute for http blah com app jar
  • 选择列表包含非聚合列

    自从更新 MySQL 以来 我注意到以下查询失败 SELECT u p name as plan COUNT u id as totalprojects FROM users u LEFT JOIN plans p ON p id acce
  • 如何在 Java 中读取/转换 InputStream 为字符串?

    如果你有一个java io InputStream对象 您应该如何处理该对象并生成一个String 假设我有一个InputStream包含文本数据 我想将其转换为String 例如我可以将其写入日志文件 最简单的方法是什么InputStre
  • oracle.jdbc.driver.OracleDriver ClassNotFoundException

    这是我收到错误的代码 我的classes12 jar已作为外部 jar 导入 import java io IOException import java io PrintWriter import java sql Connection
  • 我有什么理由应该嘲笑?

    我也是 Mockito 和 PowerMockito 的新手 我发现我无法使用纯 Mockito 测试静态方法 因此我需要使用 PowerMockito 对吗 我有一个非常简单的类 名为 Validate 使用这个非常简单的方法 publi
  • jsch - 发送特殊键(CTRL-C、CTRL-D 等)

    我需要向远程终端发送特殊密钥 如何使用 JSCH 做到这一点 Thanks Walter 尝试发送两个字节 0x03 0x04 Check ASCII 表 http www bbdsoft com ascii html了解更多
  • 如何在 Spring GCP 中订阅多个 Google PubSub 项目?

    我想在 Spring Boot 应用程序中订阅多个 Google Cloud PubSub 项目 阅读完相关问题后如何使用 Spring Cloud 在一个 Spring Boot 应用程序中连接 配置两个 pubsub gcp 项目 ht
  • Maven编译错误:包不存在

    我正在尝试向现有企业项目添加 Maven 支持 这是一个多模块项目 前 2 个模块编译和打包没有问题 但我面临编译错误 我尝试在多个模块中使用相同的依赖项 我的结构是 gt parent gt pom xml gt module 1 gt
  • 关于mysql建表的几个问题

    CREATE TABLE favorite food person id SMALLINT UNSIGNED food VARCHAR 20 CONSTRAINT pk favorite food PRIMARY KEY person id
  • 获取直方图数据

    有没有办法在 MySQL 中指定 bin 大小 现在 我正在尝试以下 SQL 查询 select total count total from faults GROUP BY total 生成的数据足够好 但行太多 我需要的是一种将数据分组

随机推荐

  • 从整个字符串中提取标签(单词)

    从字符串中提取每个单词的最佳方法是什么 例如 one two big three four seven and eight 其中那些用双引号引起来的应该被视为单个元素 array one two big three four seven a
  • Plotly:如何在不循环数据集的情况下突出显示周末?

    我正在尝试使用plotly 绘制三个不同的时间序列数据帧 每个数据帧大约有60000 条记录 同时使用不同的背景颜色突出显示周末 和工作时间 有没有一种方法可以在不循环遍历整个数据集的情况下做到这一点 如中提到的这个解决方案 https s
  • 通过 API 网关调用 lambda 函数与 Lambda 控制台时的请求正文序列化差异

    我在 AWS API Gateway 中设置了一个简单的 API 它被设置为通过 API 网关代理集成调用 Python 2 7 lambda 函数 我遇到了一个奇怪的错误 当本地和通过 lambda 测试控制台调用时 lambda 可以工
  • 为什么我会收到序列化错误?

    我有以下代码 class Program static void Main string args string xml
  • 将泛型限制为可以为 null 的内容

    我想将我正在编码的通用限制为任何可以null 这基本上是任何课程 System Nullable e g int 等等 对于类部分 这相当简单 public class MyGeneric
  • 如何从golang的websocket服务器主动向客户端发送消息

    我是 golang 和 websocket 的新手 我正在尝试编写一个 websocket 服务器 它可以在握手完成后主动向客户端发送消息 但我的服务器只会在收到客户端请求时才将消息发送给客户端 有谁知道如何实现此功能或者我在哪里可以找到相
  • sbt-1.1.1 sbtVersion 显示 1.1.0

    我调用 brew install sbt I get usr local Cellar sbt 1 1 1 491 files 48 3MB built in 7 seconds 我调用 sbt sbtVersion I get info
  • 当我点击 android 中的 edittext 视图时键盘不显示?

    当我单击编辑文本视图时 有时会显示键盘 有时会不显示键盘 在 android 2 1 中 当我单击 edittext 视图时 它会显示键盘 但是当我在 android 2 2 上启动相同的应用程序时 它不显示键盘 帮助我如何显示该问题 好吧
  • 删除文件而不是将其标记为删除

    我正在为 Windows 从 XP 到 8 1 编写一个服务 我需要递归删除一个文件夹 然后使用DeleteFile and RemoveDirectory为了那个原因 我不想用SHFileOperation因为它有MAX PATH lim
  • 将文本框绑定到 WPF 中的属性

    我在用户控件中有一个文本框 我试图从主应用程序进行更新 但是当我设置 textbox Text 属性时 它不会显示新值 即使 textbos Text 包含正确的数据 我试图将我的文本框绑定到一个属性来解决这个问题 但我不知道如何 这是我的
  • DatePicker 自定义格式的日期输入

    我想使用 redux form 将日期存储在我的状态中 我使用反应日期选择器 为了使日期选择器与我的 redux form 兼容 我写道 import React PropTypes from react import DatePicker
  • 如何将 url 参数从我的应用程序传递到 Chrome 扩展程序?

    在我的 Google App Engine 应用程序中 我想传递此用户信息 user users get current user 当用户单击应用程序中的按钮时 将其传递给 url 参数中的 Chrome 扩展程序 我怎样才能做到这一点 我
  • 为什么 Java 对重写的静态方法强制返回类型兼容性?

    Per 这个答案 https stackoverflow com questions 2223386 why doesnt java allow overriding of static methods and 这个答案 https sta
  • 使用 .readlines() 时摆脱 \n [重复]

    这个问题在这里已经有答案了 我有一个 txt 文件 其中包含值 这些值的列出如下 Value1 Value2 Value3 Value4 我的目标是将值放入列表中 当我这样做时 列表如下所示 Value1 n Value2 n The n不
  • pandas 中带有数据点的线图

    Using pandas我可以轻松地绘制线图 import pandas as pd import numpy as np matplotlib inline to use it in jupyter notebooks df pd Dat
  • 解析错误代码 209 和 -34018

    我花了几个小时学习 Parse 上的用户管理 认为考虑到它已经成为一项长期的服务 这会很容易 关于 自动用户 和会话的文档很少 我正在尝试构建一个允许用户匿名存在的应用程序 使用 PFUser enableAutomaticUser 然后他
  • javac生成的class文件总是一样的吗?

    目前 我们正在为一个大型项目 大约 2000 个源文件 重新编写所有构建系统的脚本 并且有人讨论对文件进行二进制比较以确保一切正确 这导致了以下问题 的输出是javac保证在各个编译中都是相同的还是可能会发生变化 另一个问题 https s
  • 警告消息行号 R

    我有一个大的 for 循环 循环了数百次 最后它产生了这个警告 Warning messages 1 In min j na rm TRUE no non missing arguments to min returning Inf 有什么
  • 随机选择一组不同整数的最有效方法

    我正在寻找最有效的算法来随机选择一组 n 个不同的整数 其中所有整数都在某个范围 0 maxValue 内 限制条件 maxValue 大于 n 并且可能大得多 我不在乎输出列表是否已排序 所有整数必须以相同的概率被选择 我最初的想法是构造
  • Java、JDBC INSERT ON DUPLICATE KEY UPDATE 通配符

    我有一个下一个 SQL 查询 const val INSERT OR UPDATE ITEM SQL INSERT INTO items owner id object id item id count enchant level item