Оператору JDBC не удается удалить строку в конкретной таблице MySQL

#java #mysql #jdbc #sql-delete #failover

#java #mysql #jdbc #sql-удалить #отказоустойчивость

Вопрос:

Скажем, у меня есть таблица example1 , и я использую инструкцию jdbc для удаления одной из ее строк. Я пробовал различные методы, от delete from example1 where id = 1 до statement.addbatch(sql) , но строка не удаляется. Если я выполню ту же инструкцию sql в Toad для Mysql, она сможет удалить строку просто отлично.

Странно то, что с помощью jdbc я могу просто отлично удалять строки из других таблиц; просто эта конкретная таблица дает мне неожиданные результаты.

В этой таблице нет ничего особенного. У него есть первичный ключ и нет связей ограничений / внешнего ключа.

Кроме того, это удаление является частью транзакции, поэтому для автоматической фиксации установлено значение false , и как только все записи обновляются / вставляются / удаляются, фиксация выполняется. Похоже, что у этого нет никаких проблем с какой-либо другой таблицей, и все обновления / удаления / вставки выполняются просто отлично.

С точки зрения разрешений эта таблица имеет те же права доступа для пользователя БД, что и любая другая таблица в БД.

Любые идеи или указания будут высоко оценены!

Комментарии:

1. Вы подтвердили, что оператор запускается из java?

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

3. Мне пришлось пометить ее отказоустойчивостью, потому что не было тега «сбой» или «failed», и у меня нет разрешений на создание новых тегов.

4. Не могли бы вы опубликовать структуру таблицы и код, который вы используете для выполнения запроса, пожалуйста?

5. Что вы подразумеваете под «запуском из Java»? не могли бы вы, пожалуйста, объяснить? У меня есть инструкции debug я также выполняю отладку в eclipse и вижу, как выполняется оператор .. system.out.println также печатает запрос и результат int[], длина которого равна нулю. Больше ничего не вставляется в эту таблицу. Входные данные в этой таблице вставляются с помощью хранимой процедуры, которая вызывается, когда пользователь в графическом интерфейсе удаляет что-либо из table..so в принципе, любое удаление в другой таблице приведет к появлению записи в этой таблице для этой удаленной записи с информацией об этой записи.

Ответ №1:

Включение общего ведения журнала в базе данных или профилирования в драйвере JDBC покажет вам, что на самом деле происходит в базе данных:

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

Включите профилирование запросов для Connector / J, добавив это в строку подключения: profileSQL= true

Общая документация по протоколированию:http://dev.mysql.com/doc/refman/5.1/en/query-log.html

Существует также mk-query-digest для отслеживания вашего сетевого трафика и анализа результатов: http://www.maatkit.org/doc/mk-query-digest.html

Комментарии:

1. Спасибо Джошуа. Позвольте мне попробовать это.

2. Я нашел issue…it была ошибка в моем коде. Я выполнял удаление при неправильном подключении… Мне нужно было выполнить его при подключении к источнику, но я выполнял его при подключении к целевой базе данных, и поскольку эти записи не существуют в target, он не смог их удалить. Ссылки Джошуа помогли мне переоценить мои настройки, связанные с подключением, и я обнаружил реальную проблему.

Ответ №2:

Я столкнулся с такой же ситуацией

Я помню, что в запросе была определенная ошибка, попробуйте выполнить запрос в mysql sqlyog или любом графическом интерфейсе и проверьте, работает ли это, я на 100% уверен, что это не сработает

затем исправьте запрос и проверьте его

Комментарии:

1. Как я уже сказал, я копирую и вставляю запрос из system.out.println в toad для mysql, и это работает просто отлично. Я имею в виду, насколько сложным может быть запрос типа «удалить из example1, где id = 1»? Это вызовет исключение sqlexception при наличии синтаксической ошибки… Я даже проверяю наличие SQLWarnings, но там ничего нет.