2011-05-05 16 views
12

Stiamo costruendo un'applicazione Java supportata da un database Oracle a cui accediamo tramite JDBC (driver ojdbc6.jar e orai18n.jar). Lo schema del database memorizza le colonne di testo utilizzando principalmente il tipo di dati NVARCHAR2.Dovrei usare JDBC getNString() invece di getString()?

Il JDBC documentation per JDBC ResultSet dice che getNString() è particolarmente indicata per l'uso con il NCHAR, NVARCHAR tipi di dati, ecc, ma al momento ci sono solo utilizzando getString().

Questo sembra funzionare bene, quindi mi chiedo perché dovrei usare getNString() anziché getString(). getString() inizia a non funzionare se vengono immessi caratteri non ASCII oppure il driver JDBC Oracle è indifferente sul metodo da utilizzare?

MODIFICA: Sembra che possa essere dipendente dal database: SQL Server doesn't seem to mind which you use, in base ai parametri di connessione. Qualcuno ha qualche informazione specifica su Oracle?

risposta

7

ho fatto un test su nostra applicazione e sembra che getNString() è inutile con Java 6, JDBC 6, Oracle JDBC 6 piloti e Oracle 11.1.0.6.0 . La stringa di prova che ho usato era "Δ, Й, ק, م, 7, あ, 叶, 葉, e 말", copiata da http://en.wikipedia.org/wiki/Unicode.

La maggior parte del nostro accesso ai dati avviene tramite stored procedure. Java è stato in grado di impostare e recuperare la stringa di test sopra correttamente tramite setObject() e getString() (non setString() per motivi di astrazione), raccogliendo i dati dall'interfaccia e riadattandoli all'interfaccia come previsto.

Quindi getString() funziona correttamente per i dati Unicode con Oracle 11g (come SQL Server come nel collegamento precedente), quindi continueremo a utilizzare questo anziché getNString().

+2

Suggerisco di aggiungere questo test alla suite di regressione nel caso in cui cambi nelle versioni future di Oracle o Java – artbristol

+0

@artbristol - questa è un'ottima idea. Anche un cambiamento nella configurazione di Oracle potrebbe potenzialmente causare una regressione (anche se non ho motivo di credere che tranne per esperienza con la configurazione di Oracle) – Gnat

2

Se il DB utilizza il tipo di dati NVARCHAR2, è progettato per memorizzare dati multilingue. Il tuo programma si interromperà se qualsiasi dato unicode è memorizzato in quelle colonne. Se fossi in te, mi muovo verso i metodi getNXXX()

Problemi correlati