JDBC читает данные из таблицы базы данных, которая содержит управляющие символы - PullRequest
2 голосов
/ 01 мая 2011

У меня есть следующий бит кода, который считывает данные из таблицы Oracle (Примечание: это выполняется на Jdk 1.4.2)

ResultSet message = messageStatement.executeQuery(getMsgSql);
String messageData = message.getString("MESSAGE_DATA");

Данные в столбце MESSAGE_DATA содержат текст, но также и элемент управлениясимволы, которые разделяют элементы данных в сообщении (то есть (char) 31, (char) 29) и (char) 28).

Я обнаружил, что message.getString () по какой-то причине иногда обрезает сообщение.Я могу прочитать большинство сообщений, но некоторые из них усечены.Я должен читать данные, используя другой метод?Если так, то как?

Я пытался использовать sqlplus для просмотра данных в базе данных, и это все, что они просто усекают методом message.getString ().Я видел это, когда пытался вывести результат, т.е. System.out.println (message.getString ()).

Спасибо

Обновление

Я запустил SQL-запрос с использованием функции length () в Oracle, а length ("MESSAGE_DATA") возвращает 2032, тогда как в java message.getString (1) .length () возвращает 2000. Я не уверен, почему это происходит.

Обновление

Хорошо, я могу подумать.Я только что попробовал более новую версию драйвера JDBC, и он, кажется, работает.Используемый драйвер был более старой версией, поставленной для доставки jdk1.4.Кто-нибудь знает, почему это так?А также, имеет ли применение более новая версия драйвера jdbc какие-либо последствия, особенно с учетом того факта, что приложение работает на JDK 1.4.Версия oracle - 10.1.0.3.0

Обновление

Я не уверен, что это поможет, но вот версии двух драйверов JDBC.

Драйвер JDBC, который не работает

=====  Database info =====
DatabaseProductName: Oracle
DatabaseProductVersion: Oracle Database 10g Release 10.1.0.3.0 - 64bit Production
=====  Driver info =====
DriverName: Oracle JDBC driver
DriverVersion: 8.0.5.2.0
DriverMajorVersion: 8
DriverMinorVersion: 0

Драйвер JDBC, который работает

=====  Database info =====
DatabaseProductName: Oracle
DatabaseProductVersion: Oracle Database 10g Release 10.1.0.3.0 - 64bit Production
=====  Driver info =====
DriverName: Oracle JDBC driver
DriverVersion: 10.2.0.1.0
DriverMajorVersion: 10
DriverMinorVersion: 2

Спасибо

1 Ответ

2 голосов
/ 01 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...