2009-12-30 5 views
3

Nous utilisons Java et Oracle pour le développement.Les séquences d'échappement sont-elles conservées dans CLOB?

J'ai une table dans une base de données Oracle qui contient une colonne CLOB. Certaines applications XYZ sauvegardent un fichier texte dans cette colonne. Le fichier texte a plusieurs lignes.

Est-il possible que lors de la lecture du même fichier CLOB via l'application Java, les séquences d'échappement (nouveaux caractères de ligne, etc.) puissent être perdues?

Raison J'ai demandé ceci, nous allons analyser ce fichier ligne par ligne et si les séquences d'échappement sont perdues, alors nous aurions des problèmes. J'aurais fait cette analyse moi-même, mais je suis en vacances et mon équipe a besoin d'aide d'urgence.

Apprécierait vraiment si vous pouviez fournir des pensées/entrées.

Répondre

2

Vous devez vous assurer que vous utilisez le même codage de caractères correct tout au long du processus. Je vous recommande fortement de ramasser UTF-8 pour cela. Il couvre tous les caractères humains connus dans le monde. Chaque étape qui implique la manipulation de données de caractères doit être instruite d'utiliser le même codage.

Dans le contexte SQL, assurez-vous que le DB et la table sont créés avec le jeu de caractères UTF-8. Dans le contexte JDBC, assurez-vous que le pilote JDBC utilise UTF-8; ceci est souvent configurable par une chaîne de connexion JDBC. Dans le contexte de code Java, assurez-vous que vous utilisez UTF-8 lors de la lecture/écriture de données de caractères de/vers des flux; vous pouvez le spécifier en tant qu'argument de second constructeur dans InputStreamReader et OutputStreamWriter.

1

Une CLOB stocke des données de caractères. Les retours chariot et les sauts de ligne sont des caractères valides, bien que non imprimables. Tant que votre application XYZ remplit correctement vos CLOB, le contenu devrait vous être aussi gérable que s'il provenait du fichier.

En fonction de la plate-forme et la nature de ladite "application XYZ," lignes pourrait être séparées par une ou l'autre \r (Mac), \r\n (DOS/Windows) ou \n (Unix/Linux), et vous devez tenir compte de cette fait si nécessaire. C'est un aspect où BufferedReader.readLine() est plus pratique, car il supprime de manière transparente cette différence pour vous.

+0

Une clarification mineure: Mac OS 1-9 utilisé \ r; Mac OS X utilise \ n. – trashgod

0

Je ne suis pas sûr à 100% de ce que vous entendez par séquences d'échappement dans ce contexte. Dans une chaîne littérale Java (par exemple), "\n" est une séquence d'échappement représentant une nouvelle ligne, mais une fois que cette chaîne est sortie dans quelque chose (par exemple, une base de données), ce n'est plus une séquence d'échappement.

De toute façon, à votre question directe, Java à travers peut lire le texte des Oracle CLOBs parfaitement bien. Les nouvelles lignes ne sont pas perdues.