以下是我要做的事情:
-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加载到文件时保留所有中断,空格,制表符等。
我希望这会有所帮助。我对这个问题有点烦恼,所以如果我需要进一步澄清,我将非常乐意。