Java 在SQL查询中转义新行字符

Java 在SQL查询中转义新行字符,java,sql,oracle,java-8,Java,Sql,Oracle,Java 8,我正在使用java代码读取一个表,并从中创建一个csv文件。因此,我已经转换的4行与下面类似- sam , 18 , banker , He likes to play football jam , 28 , hacker , he likes nothing 但是在某些情况下,当最后一个varchar2列包含\n时,它会变成这样 sam , 18 , banker , He likes to play foo

我正在使用java代码读取一个表,并从中创建一个csv文件。因此,我已经转换的4行与下面类似-

sam , 18 , banker , He likes to play football 
jam , 28 , hacker , he likes nothing
但是在某些情况下,当最后一个varchar2列包含\n时,它会变成这样

sam , 18 , banker , He likes 
                    to play
                    football 
jam , 28 , hacker , he 
                    likes
                    nothing
当我尝试读取文件时,每一行一次读取一个,由于没有几个字被推到后面的行中,所以我无法解析数据。有没有办法转义查询中列中的新行字符,使其成为一行

我的sql查询

select name , age , job , hobbies from person_details
我正在使用csvwriter生成csv文件-

CSVWriter csvWriter = new CSVWriter(new FileWriter(results), DELIMITER, Character.MIN_VALUE, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
我使用下面的命令删除换行符。然而,我们也在寻找保护它们的方法-


replace(replace(嗜好,chr(13),“”),chr(10),“”)

取决于另一端的CSV解析器。由于CSV没有真正标准化,它们在行为上有很大差异。但是试着用双引号把字符串括起来

SELECT '"' || name || '"',
       age,
       '"' || job || '"',
       '"' || hobbies || '"'
       FROM person_details;

但是,巴塞特的评论是有道理的。在Java代码中进行转换可能是最好的办法。

取决于另一端的CSV解析器。由于CSV没有真正标准化,它们在行为上有很大差异。但是试着用双引号把字符串括起来

SELECT '"' || name || '"',
       age,
       '"' || job || '"',
       '"' || hobbies || '"'
       FROM person_details;

但是,巴塞特的评论是有道理的。最好在Java代码中进行转换。

在查询时删除
\n
。使用以下查询

select name , age , job , REPLACE(hobbies,CHR(10),'') "hobbies" from person_details

查询时删除
\n
。使用以下查询

select name , age , job , REPLACE(hobbies,CHR(10),'') "hobbies" from person_details

使用
REPLACE
TRANSLATE
功能:

SELECT NAME, AGE, JOB, REPLACE(HOBBIES, CHR(10), '')
  FROM PERSON_DETAILS


如果要进行多个翻译,
TRANSLATE
非常有用。在这里,我增加了响应,以消除兴趣爱好中的回车、换行和换行。

使用
替换
翻译
功能:

SELECT NAME, AGE, JOB, REPLACE(HOBBIES, CHR(10), '')
  FROM PERSON_DETAILS


如果要进行多个翻译,
TRANSLATE
非常有用。在这里,我增加了响应,以消除兴趣爱好中的回车、换行和换行。

谷歌搜索“Java CSV writer”,并选择一个CSV库,无论数据来自何处,它都能为您正确写入CSV。SQL与此无关。这不是有效的CSV。也许您应该先使用预处理器来修复它。@jbnize我正在使用com.opencsv.CSVWriter来生成CSV,这将生成与上面列出的类似的文件。我用它将resultset转换为csv。这不是我使用OpenCSV时得到的输出。它将每个值用双引号括起来,这与您的输出所显示的不同。使用CSV解析器解析CSV。OpenCSV也有一个CSVReader.Google作为“JavaCSV编写器”,并选择一个CSV库,无论数据来自何处,它都能为您正确编写CSV。SQL与此无关。这不是有效的CSV。也许您应该先使用预处理器来修复它。@jbnize我正在使用com.opencsv.CSVWriter来生成CSV,这将生成与上面列出的类似的文件。我用它将resultset转换为csv。这不是我使用OpenCSV时得到的输出。它将每个值用双引号括起来,这与您的输出所显示的不同。使用CSV解析器解析CSV。OpenCSV还有一个CSVReader。Oracle无法识别C样式的字符转义,例如
\n
。我必须在更新的问题中使用查询来删除换行符。但是,我们将按照@JB Nizet的建议尝试使用csvparser。谢谢你的帮助!Oracle无法识别C样式的字符转义,例如
\n
。我必须在更新的问题中使用查询来删除换行符。但是,我们将按照@JB Nizet的建议尝试使用csvparser。谢谢你的帮助!谢谢@sticky bit。我正在尝试用Java进行转换。谢谢@sticky bit。我正在尝试用Java进行转换。