Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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目录别名和BFILE对象将上载的文件写入磁盘?_Java_Oracle_Jakarta Ee_Blob - Fatal编程技术网

Java 如何使用Oracle目录别名和BFILE对象将上载的文件写入磁盘?

Java 如何使用Oracle目录别名和BFILE对象将上载的文件写入磁盘?,java,oracle,jakarta-ee,blob,Java,Oracle,Jakarta Ee,Blob,我有一个JavaWebApp,它需要通过http上传文件,然后将它们存储在服务器上。文件需要与Oracle数据库中的特定记录相关联,因此数据库中将有一个表存储对关联记录的引用、对文件的引用以及其他描述性数据,如标题等。此表的选项似乎是: 将文件存储为BLOB 存储对该文件的B文件引用 存储包含文件路径的字符串 我们更愿意将文件存储在数据库之外,因此我们不会将其存储为BLOB。DBA指出,他们的首选选项是将引用存储为BFILE。oracle.sql.BFILE对象提供对InputStream的

我有一个JavaWebApp,它需要通过http上传文件,然后将它们存储在服务器上。文件需要与Oracle数据库中的特定记录相关联,因此数据库中将有一个表存储对关联记录的引用、对文件的引用以及其他描述性数据,如标题等。此表的选项似乎是:

  • 将文件存储为BLOB
  • 存储对该文件的B文件引用
  • 存储包含文件路径的字符串

我们更愿意将文件存储在数据库之外,因此我们不会将其存储为BLOB。DBA指出,他们的首选选项是将引用存储为BFILE。oracle.sql.BFILE对象提供对InputStream的访问以读取文件,但没有明显的写入方式

当存储目录的唯一引用是Oracle目录别名时,将文件数据写回磁盘的最佳方式是什么


我们认为simple java.io是写入文件的最佳方式,这意味着存储目录必须作为挂载提供给web应用程序服务器。由于webapp仍然可以使用该目录,因此我们决定不需要该文件,而只需将文件名存储在数据库中即可。

根据:

  • b文件是只读的。不能插入数据或以其他方式写入BFILE
  • 不能使用JDBC创建新的BFILE。它们只在外部创建
因此,您似乎需要一个单独的工具/方法将数据上载到Oracle存储目录,这可能会使BFILE在您的场景中成为一个错误的选择。

“我们更希望将文件存储在数据库之外”

为什么??您对此的备份/恢复方案是什么。例如,如果发生磁盘故障,您将如何恢复该文件?这些文件是否只是暂时的,所以实际上不需要保存它们

基本上,BFILE是BLOB存储和简单地在数据库中存储路径之间的折衷。您以与传统文件相同的方式写入它,然后使其“可供”数据库读取。如果您的web应用程序运行在与数据库不同的物理服务器上,则您需要有一个可供两个框访问的存储位置(以及相应的读/写权限)。

中详细讨论了“我们更愿意将文件存储在数据库之外”的原因