2011-05-05 3 views
12

JDBC (드라이버 ojdbc6.jarorai18n.jar)를 사용하여 액세스하는 Oracle 데이터베이스로 백업 된 Java 응용 프로그램을 빌드 중입니다. 데이터베이스 스키마는 주로 텍스트 열을 NVARCHAR2 데이터 형식을 사용하여 저장합니다. 는 JDBC ResultSet에 대한getString() 대신 JDBC getNString()을 사용해야합니까?

JDBC documentationgetNString()이 특히 NCHAR, NVARCHAR 등 데이터 유형에 사용하기위한 것입니다,하지만 지금 우리는 getString()을 사용하는 것을 말한다.

이것은 잘 작동하는 것 같습니다. 그래서 getString()이 아닌 getNString()을 사용해야하는 이유가 궁금합니다. 비 ASCII 문자가 입력되면 getString()이 시작되지 않습니까, 아니면 사용해야 할 Oracle JDBC 드라이버가 무관합니까?

EDIT : 연결 매개 변수에 따라 데이터베이스에 따라 달라질 수 있습니다 (SQL Server doesn't seem to mind which you use). 누구든지 오라클에 대한 구체적인 정보가 있습니까?

답변

7

나는 우리의 애플리케이션에 대한 테스트를 수행했으며, Java 6, JDBC 6, Oracle JDBC 6 드라이버 및 Oracle 11.1.0.6.0에서는 getNString()이 필요하지 않은 것으로 보인다. . 내가 사용한 테스트 문자열은 http://en.wikipedia.org/wiki/Unicode에서 복사 한 "Δ, Й, ק, م, 7, あ, 叶, 葉 및 말"입니다.

대부분의 데이터 액세스는 저장 프로 시저를 통해 수행됩니다. 자바는 setObject()getString() (추상화 이유로는 setString()이 아님)을 통해 위의 테스트 문자열을 올바르게 설정하고 검색 할 수 있으며, 인터페이스에서 데이터를 수집하고 예상대로 인터페이스에 다시 기록 할 수있었습니다.

따라서 getString()은 위의 링크와 같은 SQL Server와 같은 Oracle 11g에서 유니 코드 데이터로 작동하므로 여기서는 getNString() 대신 계속 사용합니다.

+2

오라클이나 자바 – artbristol

+0

@artbristol의 차후 버전에서 변경 될 경우를 대비하여 회귀 스위트에 테스트를 추가하는 것이 좋습니다. 이것은 아주 좋은 생각입니다. 오라클 구성을 변경하더라도 잠재적으로 회귀가 발생할 수 있습니다 (필자는 오라클 구성 경험을 제외하고는 아무런 이유도 없다) – Gnat

2

DB가 NVARCHAR2 데이터 유형을 사용하는 경우 다국어 데이터를 저장하도록 설계되었습니다. 유니 코드 데이터가 해당 열에 저장되어 있으면 프로그램이 중단됩니다. 내가 너라면, getNXXX() 메쏘드로 넘어갈 것이다.

관련 문제