Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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/5/sql/70.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 在数据库中存储文件_Java_Sql_Database - Fatal编程技术网

Java 在数据库中存储文件

Java 在数据库中存储文件,java,sql,database,Java,Sql,Database,我必须使用Java将任何格式的文件(XLS、PDF、DOC、JPG…)保存在数据库中。根据我的经验,我会将文件的二进制数据存储到BLOB类型字段中,有人告诉我另一种方法是使用BASE64将二进制数据编码为文本,并将字符串存储在文本类型字段中。执行此任务的最佳选项是哪一个 谢谢 Paul ManjarresBLOB会更好,因为您可以使用byte[]数据类型,并且不必从BASE64进行编码/解码。没有理由将BASE64用于简单存储。使用BLOB的理由是,它占用更少的CPU周期、更少的磁盘和网络i/o

我必须使用Java将任何格式的文件(XLS、PDF、DOC、JPG…)保存在数据库中。根据我的经验,我会将文件的二进制数据存储到BLOB类型字段中,有人告诉我另一种方法是使用BASE64将二进制数据编码为文本,并将字符串存储在文本类型字段中。执行此任务的最佳选项是哪一个

谢谢


Paul Manjarres

BLOB会更好,因为您可以使用byte[]数据类型,并且不必从BASE64进行编码/解码。没有理由将BASE64用于简单存储。

使用BLOB的理由是,它占用更少的CPU周期、更少的磁盘和网络i/o、更少的代码,并降低出现错误的可能性:

  • 正如Will Hartung所说,使用BLOB可以跳过编码/解码步骤,这将减少CPU周期。此外,有许多用于Base64编码和解码的Java库,并且在实现中存在细微差别(即PEM换行)。这意味着为了安全起见,应该使用相同的库进行编码和解码。这在创建记录的应用程序和读取记录的应用程序之间创建了不必要的耦合
  • 编码输出将大于原始字节,这意味着它将占用更多的磁盘空间(和网络i/o)

  • 使用BLOB将它们放入数据库中

    • FILE to BLOB=DB不会查询内容并将其视为。。。好。。。一个无意义的二进制BLOB,无论其内容如何。DB知道该字段可能是1KB或1GB,并相应地分配资源
    • FILE to TEXT=DB可以查询这个东西。可以在文件中搜索或修改字符串。但这次DBMS将花费更多的资源来实现这一点。字段中可能有100个字符长的文本,该字段可能存储或不存储100万个字符长的文本。文件可以具有任何类型的文本编码,并且由于表/DB编码设置,可能会丢失无效字符。如果在SQL查询中不使用文件内容,则无需使用此选项
    • BASE64=将任何内容转换为超有效文本。绕过所有兼容性问题的解决方法。存储在任何地方,打印,电报,写在纸上,将你最喜欢的自拍转换成私钥。输出将毫无意义和更大,但它将是一个普通的文本
    此外,BASE64可能会占用更多的数据库空间。什么数据库?问题被标记为数据库。请适当修改标记,使其与您的问题相匹配。