반응형
mysql java 프로그램에서 works를 선택, 삽입 및 삭제하지만 업데이트가 작동하지 않습니다.
기본 키가 있는 테이블이 있습니다.id
, 쿼리 선택, 삽입 및 삭제 자바 프로그램에서 모두 작동하지만 업데이트 쿼리는 작동하지 않으므로 '중복 업데이트 시 삽입'(레코드가 존재하지 않을 때만 작동, 레코드가 존재할 때는 업데이트가 작동하지 않습니다.)
모든 쿼리가 커밋되었으며, 제 mariadb 버전은 10.1.14입니다.
어떤 도움이라도 주신다면 미리 감사드립니다.
모든 쿼리는 mysql-cli에서 잘 작동합니다.
테이블 스키마
+------------------+----------------------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------+------+-----+---------------------+-----------------------------+
| id | int(10) unsigned | NO | PRI | NULL | |
| posng_valid_type | tinyint(3) unsigned | YES | | NULL | |
| longitude | double(9,6) | NO | | 0.000000 | |
| latitude | double(9,6) | NO | | 0.000000 | |
| heading | smallint(6) | NO | | 0 | |
| altitude | float(7,3) | NO | | 0.000 | |
| gps_speed | smallint(5) unsigned | NO | | 0 | |
| sample_time | timestamp | NO | | 0000-00-00 00:00:00 | |
| update_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------------+----------------------+------+-----+---------------------+-----------------------------+
1. 쿼리 업데이트
update `status_position`
set `status_position`.`id` = 3007,
`status_position`.`posng_valid_type` = 0,
`status_position`.`longitude` = 121.1921,
`status_position`.`latitude` = 31.2797,
`status_position`.`heading` = -1,
`status_position`.`altitude` = 0.0,
`status_position`.`gps_speed` = 0,
`status_position`.`sample_time` = timestamp '2017-02-15 03:52:23.0'
where `status_position`.`id` = 3007;
2. 중복 쿼리 업데이트
insert into `status_position` (
`id`,
`posng_valid_type`,
`longitude`,
`latitude`,
`heading`,
`altitude`,
`gps_speed`,
`sample_time`
) values (
2001,
0,
121.1921,
31.2797,
-1,
0.0,
0,
timestamp '2017-02-15 03:52:23.0'
) on duplicate key update
`status_position`.`id` = 2001,
`status_position`.`posng_valid_type` = 0,
`status_position`.`longitude` = 121.1921,
`status_position`.`latitude` = 31.2797,
`status_position`.`heading` = -1,
`status_position`.`altitude` = 0.0,
`status_position`.`gps_speed` = 0,
`status_position`.`sample_time` = timestamp '2017-02-15 03:52:23.0';
쿼리 2를 생성하는 JOOQ가 있는 자바 코드
public <R extends Record> void batchUpsertRecord(Table<R> table, List<R> records) throws PersistenceException {
Connection conn = ConnectionPoolManager.INSTANCE.getConnection();
try (DSLContext dslContext = DSL.using(conn, SQLDialect.MARIADB)) {
List<InsertQuery> insertQueryList = new ArrayList<>();
for (R record : records) {
InsertQuery<R> insert = dslContext.insertQuery(table);
insert.addRecord(record);
insert.onDuplicateKeyUpdate(true);
insert.addValuesForUpdate(mapOfChangedValues(record));
insertQueryList.add(insert);
}
dslContext.batch(insertQueryList).execute();
conn.commit();
} catch (SQLException e) {
logger.error("Failed to upsert record into table({}).", table.getName(), e);
} finally {
ConnectionPoolManager.INSTANCE.closeConnection(conn, logger);
}
}
언급URL : https://stackoverflow.com/questions/42268739/mysql-select-insert-and-delete-works-from-java-program-but-update-not-working
반응형
'IT' 카테고리의 다른 글
MySQL 5.7로 덤프 파일 가져오기 (0) | 2023.09.15 |
---|---|
.Net에 URL validator가 있습니까? (0) | 2023.09.15 |
Python에서 open과 codecs.open의 차이 (0) | 2023.09.15 |
Oracle에서 각 그룹의 최대값을 얻는 방법은 무엇입니까? (0) | 2023.09.15 |
ADO.NET을 사용하여 오라클 패키지 내 프로시저의 저장 프로시저 메타데이터 가져오기 (0) | 2023.09.15 |