IT

mysql java 프로그램에서 works를 선택, 삽입 및 삭제하지만 업데이트가 작동하지 않습니다.

itgroup 2023. 9. 15. 20:56
반응형

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

반응형