Подтвердить что ты не робот

Должен ли я использовать JDBC getNString() вместо getString()?

Мы создаем приложение Java, поддерживаемое базой данных Oracle, к которой мы обращаемся, используя JDBC (драйверы ojdbc6.jar и orai18n.jar). Схема базы данных хранит текстовые столбцы, в основном используя тип данных NVARCHAR2.

Документация JDBC для JDBC ResultSet говорит о том, что getNString() специально предназначен для использования с типами данных NCHAR, NVARCHAR и т.д., но на данный момент мы используем только getString().

Кажется, это работает нормально, поэтому мне интересно, почему я должен использовать getNString(), а не getString(). Является ли getString() запуском с ошибкой, если введены не-ASCII-символы или является драйвером Oracle JDBC безразличным относительно того, какой метод я должен использовать?

EDIT: Кажется, он может быть зависимым от базы данных: SQL Server, похоже, не против того, что вы используете, в зависимости от параметров подключения. Кто-нибудь имеет какую-либо конкретную информацию о Oracle?

4b9b3361

Ответ 1

Я сделал тест в нашем приложении, и кажется, что getNString() не требуется с драйверами Java 6, JDBC 6, Oracle JDBC 6 и Oracle 11.1.0.6.0. Используемая тестовая строка была "Δ, Й, ק, م, 7, あ, 叶, 葉 и 말", скопирована из http://en.wikipedia.org/wiki/Unicode.

Большая часть нашего доступа к данным осуществляется через хранимые процедуры. Java смогла правильно установить и получить приведенную выше тестовую строку с помощью setObject() и getString() (не setString() для абстракции), собирая данные из интерфейса и записывая их обратно в интерфейс, как ожидалось.

Следовательно, getString() работает нормально для данных Unicode с Oracle 11g (например, SQL Server, как в приведенной выше ссылке), поэтому мы будем продолжать использовать это, а не getNString().

Ответ 2

Если ваша БД использует тип данных NVARCHAR2, она предназначена для хранения многоязычных данных. Ваша программа будет ломаться, если в этих столбцах будут храниться какие-либо данные в Юникоде. Если бы я был вами, я бы перешел к методам getNXXX()