Dois-je être à l'aide de JDBC getNString() au lieu de getString()?
Nous construisons une application Java soutenu par une base de données Oracle que nous avons accès à l'aide de JDBC (pilotes ojdbc6.jar
et orai18n.jar
). Le schéma de base de données stocke les colonnes de texte en utilisant principalement la NVARCHAR2
type de données.
La JDBC documentation pour le pilote JDBC ResultSet
dit que getNString()
est particulièrement conçu pour une utilisation avec NCHAR, NVARCHAR, etc. types de données, mais pour le moment, nous sommes seulement à l'aide de getString()
.
Cela semble bien fonctionner, alors je me demande pourquoi je devrais utiliser getNString()
plutôt que getString()
. Est getString()
va commencer à échouer si les caractères non-ASCII sont entrés, ou est l'Oracle JDBC driver indifférent quant à la méthode que je devrais utiliser?
EDIT: il Semble qu'il peut être de base de données-dépendant: SQL Server ne semblent pas à l'esprit que vous utilisez, selon les paramètres de connexion. Quelqu'un aurait-il des informations spécifiques sur l'Oracle?
Vous devez vous connecter pour publier un commentaire.
J'ai fait un test sur notre application, et il semble que
getNString()
est inutile avec la version 6 de Java, JDBC 6, Oracle JDBC 6 pilotes et Oracle 11.1.0.6.0. La chaîne de test que j'ai utilisé était "Δ, Й, ק, م, ๗, あ, 叶, 葉, et le cheval", copié à partir de http://en.wikipedia.org/wiki/Unicode.La plupart de nos accès aux données se fait via des procédures stockées. Java a été en mesure de définir et de récupérer le test ci-dessus de la chaîne correctement via
setObject()
etgetString()
(passetString()
pour l'abstraction des motifs), la collecte de données à partir de l'interface et de l'écrire à l'interface comme prévu.Donc
getString()
fonctionne bien pour les données Unicode avec Oracle 11g (comme SQL Server comme dans le lien ci-dessus) nous allons donc continuer à l'utiliser plutôt que d'getNString()
.Si votre base de données utilise le
NVARCHAR2
type de données, il est conçu pour le stockage de données multilingues. Votre programme ne fonctionnera plus si toutes les données unicode est stocké dans ces colonnes. Si j'étais vous, je voudrais passer à lagetNXXX()
méthodes