Nano Hash - криптовалюты, майнинг, программирование

Дублирующая запись java jdbc для основного ключа при вставке внешнего ключа

«Повторяющаяся запись для ключа «основной»» кажется популярной проблемой в Интернете, хотя мне не удалось найти сообщение, связанное с моей проблемой. Я пытаюсь вставить значения в таблицу с помощью java jdbc, но почему-то у меня возникает эта проблема с «первичным» ключом.

Соответствующий код таков:

preparedStatement = connect
              .prepareStatement("insert into database1.table2 values (default, ?, ?));
          preparedStatement.setString(1, randomString(12)); // Inserts a normal String, tested & working
          insert_plz(plz); // Inserts a given value as a primary key into table1
          preparedStatement.setInt(2, plz); // Inserts that value as a foreign key 
          preparedStatement.executeUpdate(); // Exception is thrown here

Вызов функции insert_plz(plz) работает без проблем, проверил по базе.

Вот как я создал таблицу2:

create table table2 (
standorte_schluessel int unsigned auto_increment,
name varchar (20) not null,    
postleitzahl int unsigned,
primary key (standorte_schluessel),
foreign key (postleitzahl) references plz (postleitzahl) on delete cascade
);

Теперь мой вопрос: почему при попытке вставить внешний ключ выдается ошибка первичного ключа?

Кроме того, я новичок в mysql (но не в java), поэтому ответ на мой вопрос может быть очевидным (к сожалению, не для меня).

Это журнал ошибок:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '74141' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246)
at Connect.insert_standort(Connect.java:113)
at Connect.readDataBase(Connect.java:41)
at Main.main(Main.java:5)

Ответы:


1

Вы должны явно указать столбцы и использовать следующий запрос на вставку:

insert into database1.table2(name, postleitzahl) values (?, ?)

См. Использование AUTO_INCREMENT.

Я не уверен на 100%, но подозреваю, что использование DEFAULT в позиции столбца id может вставить текущее значение автоинкремента вместо следующего автоинкремента.

11.06.2014
  • Спасибо, Марк. Я добавил конкретный код. Кроме того, я сбросил всю базу данных и настроил ее снова, потому что слышал, что это тоже может быть полезно. Это работает, поэтому ваш ответ должен быть решением! Спасибо еще раз :) 11.06.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..