Вставка JDBC с автоинкрементом - PullRequest
0 голосов
/ 09 января 2019

Я выполняю запрос, используя библиотеку MySQL в Java. В моей структуре БД есть столбец с именем cod_nfs (первичный ключ, а не ноль и auto_increment). Обычно в каждом запросе вставки я устанавливаю значение null, и после выполнения запроса он увеличивает последний идентификатор, но выполнение этого в java дает мне исключение.

Это код:

String SQL = "INSERT INTO infosetdata(cod_nfs,savingDate_nfs,attributeValue_nfs,codInfoSet_nfs,codColumn_nfs,codRow_nfs) VALUES (null,'2019-01-08',?,?,?,?)";


for( String value : values ) {
                ps = conn.prepareStatement(SQL);
                ps.setString(1, value);
                ps.setInt(2, dataId);
                ps.setInt(3, y);
                ps.setInt(4, x);
                ps.executeUpdate();
                y++;
            }

Как выполнить запрос с идентификатором автоинкремента?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Не включать столбец первичного ключа во вставку.

Кроме того, не готовьте заявление каждый раз. Просто сделай это один раз.

String SQL = "INSERT INTO infosetdata (savingDate_nfs,attributeValue_nfs,codInfoSet_nfs,codColumn_nfs,codRow_nfs) " 
           + "VALUES ('2019-01-08',?,?,?,?)";
ps = conn.prepareStatement(SQL);
for( String value : values ) {
   ps.setString(1, value);
   ps.setInt(2, dataId);
   ps.setInt(3, y);
   ps.setInt(4, x);
   ps.executeUpdate();
   ResultSet rs = ps.getGeneratedKeys();
   if (rs.next()) {
     int pk = rs.getInt(1);
     System.out.println("Generated PK = " + pk);
   }
   y++;
}

Как видите, вы можете восстановить сгенерированное значение PK, используя PreparedStatement.getGeneratedKeys () .

0 голосов
/ 09 января 2019

Вы не должны устанавливать значение для cod_nfs, потому что оно уже установлено как автоинкрементное. Попробуйте ниже:

String SQL = "INSERT INTO infosetdata(savingDate_nfs,attributeValue_nfs,codInfoSet_nfs,codColumn_nfs,codRow_nfs) VALUES ('2019-01-08',?,?,?,?)

Если это дает ошибку, убедитесь, что ваш столбец cod_nfs установлен как автоинкрементный. Попробуйте запустить:

ALTER TABLE infosetdata MODIFY cod_nfs INT(11) NOT NULL AUTO_INCREMENT

Спасибо @Mark Rotteveel за помощь по этому вопросу в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...