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

时间:2014-08-21 00:21:54

标签: java html sql oracle line-breaks

以下是我要做的事情:

-in Java,读取文本文件并创建String(保留换行符)

- 在控制台(Eclipse)中的SQL String更新(或插入)语句中显示BLOB,但只在一行显示(无法在控制台中呈现换行符) )

- 将在控制台中打印的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();

到目前为止,这么好。我现在有一个String可以放在SQL语句中。所以现在我创建这样的SQL语句 -

String myStatement = "UPDATE ...... SET CONTENT = RAWTOHEX('" + myReturnedFileContentsString + "')...

然后我将myStatement打印到控制台,这样我就可以将SQL复制/粘贴到Toad中(我知道我可以只是程序化地执行它,但我需要这样做)。语句字符串在字符串中正确打印为一行\n

然后我将SQL复制/粘贴到Toad中,执行命令,...然后将String作为BLOB加载到数据库中就好了。

接下来,刷新表后,我将BLOB保存到文本文件,然后打开该文件。而那.​​.....我开始失败的地方。文本在文本中使用\n呈现。没有新行...它看起来不像我从中读取的文件来创建语句。我尝试在RAWTOHEX部分中使用REGEXP_REPLACE\n替换为\r\n。我试过在不同的编辑器中打开文件等等......

我错过了什么?这可能吗?

非常感谢任何帮助。

修改

我想要完成的事情:

我在Oracle DB中有一个包含以下2列的表:

-FILE_NAME(主键)

-CONTENT(BLOB)

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

如果我们现在将表格中的CONTENT Blob转换为String,我们会假装,这就是值" a"。现在,我们的文件(文本文件)如下所示:

<html>
 <body>
  <p>Hi, I am Paragraph 1</p>
  <p>Hi, I am Paragraph 2</p>
 </body>
</html>

所以我需要读取该文件并将其转换为String,将其与&#34; a&#34;进行比较,并且由于它不同,我需要生成SQL,并且将其打印到控制台(Eclipse),使用从String_New创建的新Blob更新表中行的CONTENT列。

所以,如果我使用这种方法来读取我在原始答案中放入的文件,但是在读完每一行后只追加\n,比较,然后创建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 ....

好的,所以让我们忽略现在的要求,并滚动我们拥有的东西。因此,我在控制台中复制此输出,将其粘贴到Toad中,执行,然后更新BLOB。到目前为止一切都很好。

现在,我需要能够双击表格中的BLOB(在Toad中)将其保存到文件中,打开文件,并在我们读入的文件中看到它(它应该包含所有文件)换行符,制表符,空格等。)。

鉴于我们只是复制/粘贴/执行控制台输出,如果我将该Blob加载到来自DB的文件,它确实看起来像我需要的那样。所以,如果我对控制台输出看起来很酷(有换行符),我想我已经完成了。但是,我不能让控制台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 ...

基本上,它都在控制台的一行上。但是我仍然需要能够复制这个SQL,粘贴/执行Toad,然后当我将数据库中的Blob保存到文件并打开它时,看起来就像我首先读到的文件(即所有文件)空格,制表符,换行符等。)

所以现在我将2段HTML存储为数据库中的Blob。现在让我们假装我将文件更改为:

<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>

我现在需要能够从数据库中正确加载旧的2段HTML,将其与文件的新3段HTML进行比较,并生成单行SQL语句在Eclipse中,它将更新数据库中的Blob,并在从DB加载到文件时保留所有中断,空格,制表符等。

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

0 个答案:

没有答案