我们正在使用Java和Oracle进行开发。
我在oracle数据库中有一个表,其中包含一个CLOB列。某些XYZ应用程序会在此列中转储文本文件。文本文件有多行。
是否有可能在通过Java应用程序读取相同的CLOB文件时,转义序列(新行字符等)可能会丢失?
我问这个原因是,我们逐行解析这个文件,如果转义序列丢失了,那我们就麻烦了。我自己会做这个分析,但我正在度假,我的团队需要紧急帮助。
如果您能提供任何想法/意见,我们将非常感激。
答案 0 :(得分:2)
您需要确保在整个过程中使用正确且相同的字符编码。我强烈建议你为UTF-8
提货。它涵盖了世界上众所周知的每一个人类角色。应指示涉及处理字符数据的每个步骤使用相同的编码。
在SQL上下文中,确保使用UTF-8
字符集创建数据库和表。在JDBC上下文中,确保JDBC驱动程序正在使用UTF-8
;这通常可以通过JDBC连接字符串进行配置。在Java代码上下文中,确保在从/向流读取/写入字符数据时使用UTF-8
;您可以在InputStreamReader
和OutputStreamWriter
中将其指定为第二个构造函数参数。
答案 1 :(得分:1)
CLOB存储字符数据。回车和换行是有效字符,但不可打印。只要您的XYZ应用程序正确填充您的CLOB,内容应该像您来自文件一样易于管理。
根据平台和所述“XYZ应用程序”的性质,行可以由\r
(Mac),\r\n
(DOS / Windows)或\n
分隔(Unix) / Linux),如果有必要,你应该考虑这个事实。这是BufferedReader.readLine()
更方便的一个方面,因为它透明地为你消除了这种差异。
答案 2 :(得分:0)
在这种情况下,我不能100%确定逃逸序列的含义。在(例如)Java文字字符串中,"\n"
是表示换行符的转义序列,但是一旦将该字符串输出到某个东西(比如数据库),它就不再是转义序列,它是一个实际的换行符字符。
无论如何,对于你的直接问题,Java through可以完全从Oracle CLOB中读取文本。新线不会丢失。