Java Обновляемая аномалия Resultset с данными UTF-8 в английском Windows - PullRequest
3 голосов
/ 23 февраля 2011

У меня странная проблема.Я получаю исключение, когда пытаюсь обновить или удалить строку в обновляемом наборе результатов, который содержит неанглийские символы utf.Однако вставка идет нормально.


java.sql.SQLException: refreshRow () вызывается для строки, которая была удалена или был изменен первичный ключ.


Самыми странными вещами являются:

  1. Эта ошибка возникает только тогда, когда скомпилированный jar запускается в windows
  2. Однако тот же самый jar-запуск в Linux работает нормально для того жеданные без проблем.
  3. Тот же проект, запущенный из IDE, также хорошо работает в Windows.

Другая информация на случай, если это будет полезно


ОС:Windows XP (английский с установленной поддержкой не английского языка)

БД: MySQL, кодировка utf8, сопоставление - utf8_general_ci

IDE: Netbeans 6.9.1

JDK: обновление 623

Connector / J 5.1.15 (Просто переключитесь, чтобы проверить, работает ли это, но та же проблема с версией 14)

Строка подключения включает в себя: "useUnicode = true" и "characterEncoding = utf8"

Изначально считал, что в IDE есть что сделать, поэтому разместил это сообщение на форуме netbeans

http://forums.netbeans.org/topic36558.html

Также кросс-публикация на форумах JDBC mysql в надежде найти какой-нибудь ответ

http://forums.mysql.com/read.php?39,408795,408795

но не мог получитьпомогите там.


Пока проблема, кажется, Windows.Может быть, это просто незначительная проблема, но не могу придумать никакой работы.

Нужно некоторое предложение

Спасибо и всего наилучшего

Дипак

Ответы [ 2 ]

0 голосов
/ 31 декабря 2015

У меня была такая же проблема, и я решил ее. Я не понимаю, почему это происходит, но это происходит, когда ваш первичный ключ таблицы MySQL объединяется. В моей базе данных есть много таблиц, которые объединяют первичный ключ и другие, которые имеют автоинкремент. Вероятно, я заметил, что эта проблема не возникает в таблицах с автоинкрементным первичным ключом.

0 голосов
/ 11 июня 2012

Похоже, ваша IDE переопределяет кодировку по умолчанию, которую вы получаете при запуске приложения из командной строки. Если вы проверите фактические аргументы JVM, которые использует IDE (обычно доступные в окне вывода вашей IDE), вы, вероятно, увидите включение аргумента кодировки файла, например:

-Dfile.encoding="UTF-8"

Попробуйте запустить приложение с этим аргументом JVM и посмотрите, имеет ли это какое-то значение, а если нет - сравните фактическую кодировку, используемую при запуске из IDE и в командной строке, следующим образом:

System.out.println(System.getProperty("file.encoding"));
...