Проблема со специальными символами и prepareStatement, ТОЛЬКО если я использую setString - PullRequest
1 голос
/ 03 августа 2011

Я читал много тем по этой теме, но все указывают на набор символов в базе данных.

Я использую строки со специальными символами, такими как 'ñ', и не могу установить их прямо в базе данных. Как вы можете догадаться, символы поменялись на '?'.

Дело в том, что, используя это утверждение, я получаю его ПРАВО:

stmt = con.prepareStatement("INSERT INTO LONG_CODES_TABLE (TIMESTAMP, TABLE_NAME, CODE__C, CODE_DESC) 
VALUES (GET_TIMESTAMP, 'MUNICIPIOS', '" + municipio + "',  '" + municipio + "') ");

И только в той же базе данных и таблице, ничего не меняя, если я использую следующее, я получаю '?' символ в БД:

stmt = con.prepareStatement("INSERT INTO LONG_CODES_TABLE (TIMESTAMP, TABLE_NAME, CODE__C, CODE_DESC) 
VALUES (GET_TIMESTAMP, 'MUNICIPIOS', ?,  ?) ");

stmt.setString(1, municipio);

stmt.setString(2, municipio);

Итак, проблема с символами возникает ТОЛЬКО, если я использую setString. Есть идеи?

РЕДАКТИРОВАТЬ: значение переменной «municipio», например: «ABADIÑO». Позже я могу проверить разницу между выполнением этого в пути или другим способом, запросив это значение с помощью оператора sql, например:

select * from long_codes_table 
where table_name = 'MUNICIPIOS' and code__c = 'ABADIÑO'

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

Спасибо.

1 Ответ

1 голос
/ 01 ноября 2011

У меня тоже было такое поведение. Кроме того, я заметил, что эта ошибка не возникала при запуске приложения из среды IDE. Вот как я понял, что в атрибутах JVM отсутствовал атрибут для кодировки.

java %vm-opts% %clspth% -Dfile.encoding=UTF-8 ...
...