mysql从java程序中选择、插入和删除工作,但更新不工作

mysql从java程序中选择、插入和删除工作,但更新不工作,java,mysql,sql-update,mariadb,jooq,Java,Mysql,Sql Update,Mariadb,Jooq,我有一个主键为id的表,选择、插入和删除java程序中的所有查询,但更新查询不起作用,以便“重复更新时插入”(仅在记录不存在时起作用,当记录存在时,更新不起作用) 所有查询都已提交,我的mariadb版本为10.1.14 提前感谢您的帮助 所有查询在mysql cli中都运行良好 表模式 +------------------+----------------------+------+-----+---------------------+---------------------------

我有一个主键为
id
的表,选择、插入和删除java程序中的所有查询,但更新查询不起作用,以便“重复更新时插入”(仅在记录不存在时起作用,当记录存在时,更新不起作用)

所有查询都已提交,我的mariadb版本为10.1.14

提前感谢您的帮助

所有查询在mysql cli中都运行良好

表模式
+------------------+----------------------+------+-----+---------------------+-----------------------------+
|字段|类型|空|键|默认|额外|
+------------------+----------------------+------+-----+---------------------+-----------------------------+
|id | int(10)无符号| NO | PRI | NULL ||
|posng|u有效|u类型| tinyint(3)无符号| YES | NULL ||
|经度|双(9,6)|无| | 0.000000 ||
|纬度|双(9,6)|无| | 0.000000 ||
|标题| smallint(6)| NO | | 0 ||
|高度|浮动(7,3)|否| | 0.000 ||
|gps|U速度| smallint(5)无符号|否| 0 ||
|样本|时间戳|编号| | 0000-00-00 00:00:00 ||
|更新|时间戳|否| |当前|时间戳|在更新当前|时间戳时|
+------------------+----------------------+------+-----+---------------------+-----------------------------+
1.更新查询
update`status\u position`
设置'status\u position'。'id`=3007,
`状态“位置”.`posng\u有效类型”`=0,
`状态位置`.`经度`=121.1921,
`状态位置`.`纬度`=31.2797,
`状态位置`.`标题`=-1,
`状态_位置`.`高度`=0.0,
`状态“位置”.“gps速度”=0,
`状态“位置”.“样本时间”=时间戳“2017-02-15 03:52:23.0”
其中,`status\u position`.`id`=3007;
2.重复查询更新
插入到“状态位置”(
`id`,
`posng\u有效\u类型`,
`经度`,
`纬度`,
`标题`,
`海拔高度`,
`gps_速度`,
`采样时间`
)价值观(
2001, 
0, 
121.1921, 
31.2797, 
-1, 
0.0, 
0, 
时间戳“2017-02-15 03:52:23.0”
)关于重复密钥更新
`状态位置`.`id`=2001,
`状态“位置”.`posng\u有效类型”`=0,
`状态位置`.`经度`=121.1921,
`状态位置`.`纬度`=31.2797,
`状态位置`.`标题`=-1,
`状态_位置`.`高度`=0.0,
`状态“位置”.“gps速度”=0,
`状态“位置”.“样本时间”=时间戳“2017-02-15 03:52:23.0”;
生成查询2的JOOQ的java代码
public void batchUpsertRecord(表、列表记录)引发PersistenceException{
Connection conn=ConnectionPoolManager.INSTANCE.getConnection();
try(DSLContext=DSL.using(conn,sqldial.MARIADB)){
List insertQueryList=新的ArrayList();
对于(R记录:记录){
InsertQuery insert=dslContext.InsertQuery(表);
插入.addRecord(记录);
insert.onDuplicateKeyUpdate(true);
插入.addValuesForUpdate(更改值映射(记录));
insertQueryList.add(insert);
}
批处理(insertQueryList.execute();
conn.commit();
}捕获(SQLE异常){
logger.error(“未能将记录向上插入表({})。”,table.getName(),e);
}最后{
ConnectionPoolManager.INSTANCE.closeConnection(连接,记录器);
}
}

不要在中设置idupdate@mcalex感谢您的回复,但它似乎不起作用。它不应该是
UpdateQuery
(因此
List
更早吗?(我不知道JOOQ,但这一点看起来很奇怪)您是说第3007行和第2001行存在吗?以及值示例中的查询与表中已有的查询不同?但是,在运行这些查询时,值没有更改?并且没有从Java引发错误消息或异常?我已为此注册了一个错误:。但是,我无法复制它。您使用的JDBC驱动程序版本是什么?不要在中设置idupdate@mcalex感谢您的回复,但它似乎不起作用。它不应该是
UpdateQuery
(因此
List
)吗?(我不知道JOOQ,但这一点看起来很奇怪)您是说第3007行和第2001行存在?并且示例查询中的值与表中已有的值不同?但是,在运行这些查询时,值没有更改?并且没有从Java引发错误消息或异常?我已为此注册了一个错误:。但是,我无法复制它。您使用的JDBC驱动程序版本是什么?