ResultSet.getString () в столбце VARCHAR2 возвращает пустую строку - PullRequest
2 голосов
/ 12 ноября 2010

Отказ от ответственности: На самом деле я ничего не знаю ни о Oracle, ни о Java. Проблема в проекте, который какой-то другой разработчик завершил в какой-то момент времени, а затем покинул компанию. Теперь мне нужно настроить веб-сервер, базу данных и запустить все это.

код приблизительно такой:

OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:<user>/<password>@localhost:1521:xe");
OracleConnection ocon = (OracleConnection)ods.getConnection();
OracleStatement stmt = (OracleStatement)ocon.createStatement();
OracleResultSet rs = (OracleResultSet)stmt.executeQuery("SELECT POLLID, QUESTION, ISMULTISELECT FROM POLL WHERE POLLID = " + pollID);

if (!rs.next()) {
    System.out.println("No rows found.");
    return false;
}
this._PollID = rs.getInt("POLLID");
this._Question = rs.getString("QUESTION");
this._IsMultiSelect = rs.getBoolean("ISMULTISELECT");

Столбцы POLLID и ISMULTISELECT возвращают правильные значения, как и ожидалось. ВОПРОС, кажется, всегда возвращает пустую строку. Значение в БД явно не пустое.

rs.getAsciiStream("QUESTION").available() также возвращает ноль.

Я что-то упускаю здесь совершенно очевидно?

EDIT:

  • sqlplus возвращает значение varchar2 просто отлично

  • подключение через odbc (в отличие от тонкого) также заставляет работать

Ответы [ 6 ]

1 голос
/ 30 октября 2014

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

Обходной путь, который я нашел:

String value = new String(resultset.getBytes());

Убедитесь, что вы используете правильную кодировку, если требуется:

String value = new String(resultset.getBytes(), [CHARSET])
1 голос
/ 15 января 2011

У меня была точно такая же проблема, и я обнаружил, что корень проблемы исходит от orai18n.jar.как только я удалил это из моего classpath, проблема ушла.

1 голос
/ 21 ноября 2010

Спасибо всем, кто ответил. На данный момент кажется, что проблема между тонким драйвером и XE-версией Oracle. К сожалению, у нас нет полной версии (мы в основном разработчики ASP.NET/MS SQL), поэтому нам пока нужно придерживаться драйвера ODBC и надеяться, что проблема волшебным образом разрешится сама собой, когда мы переместим ее в живую среду. (размещено третьей стороной). Очень дурацкое предположение, чтобы сделать, но на данный момент я не вижу других вариантов ....

1 голос
/ 12 ноября 2010

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

0 голосов
/ 14 декабря 2017

У меня была такая же проблема. «getInt ()» вернул бы правильное значение из базы данных Oracle 9i, но использование «getString ()» привело бы к пустой строке, независимо от того, сколько раз я запускал, в затмении или снаружи на отдельном Tomcat или других серверах.

Пройдя через множество различных тем и довольно много испытаний, я пришел к выводу, что проблема связана с версией ojdbc6.jar, которую я использовал. Ранее я использовал ojdbc6.jar с версией Oracle 12.1.0.1., Что не очень хорошо для подключения к OLD Oracle 9i DB. После осознания я переключился на ojdbc6.jar из Oracle 11.2.0.3, и он работал как прелесть.

Надеюсь, это поможет. ура!

0 голосов
/ 23 ноября 2011

У меня была такая же проблема с eclise GCJ (Stock centos6) и mysql-connector с одинаковыми сцепленными запросами. Проблема была решена с возвратом назад к openJDK.

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