2009-12-30 88 views
3

我們正在使用Java和Oracle進行開發。CLOB中保存了轉義序列嗎?

我有一個oracle數據庫中有一個CLOB列的表。某些XYZ應用程序在此列中轉儲文本文件。該文本文件有多行。

是否有可能在通過Java應用程序讀取相同的CLOB文件時,轉義序列(新行字符等)可能會丟失?

我問這個問題的原因是,我們一行一行解析這個文件,如果轉義序列丟失了,那麼我們會麻煩的。我本人會自己做這個分析,但是我正在度假,我的團隊需要緊急幫助。

如果您可以提供任何想法/意見,我們將非常感激。

回答

2

您需要確保在整個過程中使用一個正確且相同的字符編碼。我強烈建議你去取UTF-8。它涵蓋了世界上已知的每個人類角色。涉及處理字符數據的每一步都應該被指示使用相同的編碼。

在SQL上下文中,確保使用UTF-8字符集創建數據庫和表。在JDBC上下文中,確保JDBC驅動程序正在使用UTF-8;這通常可以通過JDBC連接字符串進行配置。在Java代碼上下文中,確保在從/到流中讀取/寫入字符數據時使用UTF-8;您可以在InputStreamReaderOutputStreamWriter中指定它作爲第2個構造函數參數。

1

CLOB存儲字符數據。回車和換行是有效的字符,儘管不可打印。只要你的XYZ應用程序正確地填充你的CLOB,內容應該和你一樣易於管理,就好像它們來自文件一樣。

根據平臺和性質上說,「XYZ應用程序,」線可通過任一\r(MAC)\r\n(DOS/Windows)或\n(UNIX/Linux)的分離,你應該體諒這個事實如有必要。這是BufferedReader.readLine()更方便的一個方面,因爲它透明地爲您消除了這種差異。

+0

稍作澄清:使用Mac OS 1-9 \ r; Mac OS X使用\ n。 – trashgod 2009-12-30 23:20:07

0

我不是100%確定你在這種情況下的轉義序列的含義。在(例如)Java文字字符串中,"\n"是表示換行符的轉義序列,但是一旦將該字符串輸出到某個數據庫(如數據庫)中,它就不再是轉義序列,而是一個實際的換行符。

無論如何,對於您的直接問題,Java通過可以從Oracle CLOB中讀取文本完美無缺。換行符不會丟失。