Я пытаюсь сохранить файл XML в базу данных, но когда я пытаюсь установить CLOB для CallableStatement я получаю это исключение:java.sql.SQLRecoverableException: 10 символа данных CL не может быть прочитан
java.sql.SQLRecoverableException: 10 char of CLOB data cannot be read
Когда я просматриваю файл в Notepad ++ со всеми показанными символами, я не вижу никаких специальных символов. Кодировка базы данных - AL32UTF8. Как я могу найти эти 10 символов, которые нельзя прочитать? Это определенно не 10-й символ, как можно думать, потому что 10-й символ в файле «s». Первая строка:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Фрагмент кода:
CallableStatement cs = con.prepareCall("{ call scenario.add(?,?,?,?,?) }");
cs.registerOutParameter(1, Types.INTEGER);
cs.setLong(2, cfg.getScenarioId());
cs.setString(3, cfg.getType());
cs.setClob(4, new InputStreamReader(new FileInputStream(file), "UTF-8"), (int) file.length());
cs.setString(5, cfg.getFileName());
сбой приложения на setClob (то же самое происходит, если использовать setCharacterStream()).
Является ли файл фактически UTF-8 или может иметь некоторые символы ISO-8859-1 - даже те, которые визуализируют, может быть, символ валюты, - который не может быть преобразован красиво? Во всяком случае, похоже, что это может быть проблема кодирования символов. –
Да, это на самом деле UTF-8. На самом деле я нашел проблему - это 2 слова на русском языке, у обоих есть 5 букв. Но теперь я не понимаю, почему они вызывают проблему. Я сохраняю файл в UTF-8, если я пытаюсь прочитать его с другой кодировкой, я получаю беспорядок вместо этих двух слов, в UTF-8 все нормально. Таким образом, они UTF-8, но CLOB не хочет их читать. Зачем? – mykola