Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新和读取Oracle DB BLOB时保留换行符_Java_Html_Sql_Oracle_Line Breaks - Fatal编程技术网

Java 更新和读取Oracle DB BLOB时保留换行符

Java 更新和读取Oracle DB BLOB时保留换行符,java,html,sql,oracle,line-breaks,Java,Html,Sql,Oracle,Line Breaks,以下是我试图做的: -在Java中,读取文本文件并创建保留换行符的字符串 -在控制台Eclipse中的SQL BLOB Update或Insert语句中显示该字符串,但仅在一行上显示,无法在控制台中呈现换行符 -将控制台中打印的SQL复制/粘贴到Toad并执行 那么 -从Oracle将新更新的BLOB保存到Toad的文件中,并让它渲染换行符 以下是我到目前为止所做的尝试: 这是我读文件的地方- File file = new File(pathToFile); fileIn = new File

以下是我试图做的:

-在Java中,读取文本文件并创建保留换行符的字符串

-在控制台Eclipse中的SQL BLOB Update或Insert语句中显示该字符串,但仅在一行上显示,无法在控制台中呈现换行符

-将控制台中打印的SQL复制/粘贴到Toad并执行

那么

-从Oracle将新更新的BLOB保存到Toad的文件中,并让它渲染换行符

以下是我到目前为止所做的尝试:

这是我读文件的地方-

File file = new File(pathToFile);
fileIn = new FileReader(pathToFile);
BufferedReader br = new BufferedReader(fileIn);
fileContents = new StringBuilder((int) file.length());
String line;
try {
    while ((line = br.readLine()) != null) {
    fileContents.append(line).append("\\n");
} ...

...
return fileContents.toString();
到目前为止,一切顺利。现在我有了一个字符串,可以将其放入SQL语句中。现在我创建如下SQL语句-

String myStatement = "UPDATE ...... SET CONTENT = RAWTOHEX('" + myReturnedFileContentsString + "')...
然后我将myStatement打印到控制台上,这样我就可以将SQL复制/粘贴到Toad中。我知道我可以通过编程实现,但我需要这样做。语句字符串正确打印为一行,\n在字符串中

然后我将SQL复制/粘贴到Toad中,执行命令,。。。它将字符串作为BLOB加载到DB中

接下来,在刷新表之后,我将BLOB保存到一个文本文件中,然后打开该文件。和这就是我开始失败的地方。文本以文本中的\n符号呈现。没有新的线路。。。它看起来不像是我用来创建语句的文件。我已尝试在RAWTOHEX节中使用REGEXP\u REPLACE将\n替换为\r\n。我试着在不同的编辑器中打开文件,等等

我错过了什么?这可能吗

非常感谢您的帮助

编辑

我正在努力实现的目标:

我在Oracle DB中有一个表,它有以下两列:

-文件名主键

-内容块

让我们假装这张桌子只有一排。我正在编写一个Java程序,它将捕获BLOB并将其转换为字符串。让我们称之为旧字符串。接下来,程序将读取一个文件并将其内容转换为字符串。让我们称之为新字符串。然后,程序将比较这两个字符串,如果它们不同,它将生成SQL,以使用从String_new创建的新Blob更新表中的内容列

让我们假设,如果我们现在将表中的内容Blob转换为字符串,它将是值a。现在,我们的文件文本文件如下所示:

<html>
 <body>
  <p>Hi, I am Paragraph 1</p>
  <p>Hi, I am Paragraph 2</p>
 </body>
</html>
<html>
 <body>
  <p>Hi, I am Paragraph 1</p>
  <p>Hi, I am Paragraph 2</p>
  <p>Hi, I am Paragraph 3</p>
 </body>
</html>
好吧,现在让我们忽略一个要求,继续我们现有的。因此,我在控制台中复制这个输出,将其粘贴到Toad中,执行,然后更新BLOB。到目前为止还不错

现在,我需要能够双击Toad中表中的BLOB将其保存到一个文件中,打开该文件,并查看它在我们阅读的文件中的显示,它应该具有所有的换行符、制表符、空格等

考虑到我们刚刚复制/粘贴/执行的控制台输出,如果我从DB将该Blob加载到一个文件中,它确实看起来像我需要的那样。所以,如果我对控制台输出的换行操作很酷的话,我想我已经完成了。但是,我不能让控制台SQL输出有多行。我需要相同的SQL语句在控制台中与其他可能需要的语句类似,以满足我的要求:

UPDATE table SET CONTENT = RAWTOHEX('<html><body><p>Hi, I am Paragraph 1</p><p>Hi, I am Paragraph 2</p></body></html>') WHERE ...
现在,我需要能够正确地从DB加载旧的2段HTML,将其与文件的新3段HTML进行比较,并在Eclipse中生成一行SQL语句,该语句将更新DB中的Blob,并且从DB加载到文件时保留所有分隔符、空格、制表符等


我希望这有帮助。我对这个问题有点恼火,因此如果我需要进一步澄清,我将非常乐意。

为什么在append\\n中有两个反斜杠?这样,当我将sql语句中的内容字符串打印到控制台时,它实际上不会断开到新行。相反,它会打印反斜杠,如果我在读取新行后只附加一个反斜杠n,然后打印到控制台,它会在控制台中显示同样多的行,但是如果我将整个混乱复制到toad并执行,它们就会加载到文件中。一切都按我的要求进行。除了,它不是控制台中的一行。这是一个要求,所以你神奇地希望换行符不显示,以便你可以复制,然后让他们神奇地重新出现后,你粘贴?我认为这是一个XY问题。告诉我们你想要完成什么,而不是你认为你需要如何去做。检查我文章中的编辑。我希望有人帮忙把事情弄清楚。如果没有,请告诉我,我会尽力帮助澄清
<html>
 <body>
  <p>Hi, I am Paragraph 1</p>
  <p>Hi, I am Paragraph 2</p>
  <p>Hi, I am Paragraph 3</p>
 </body>
</html>