gpt4 book ai didi

java - BLOB:无法读取所有数据,但只有几 kb

转载 作者:可可西里 更新时间:2023-11-01 08:20:36 24 4
gpt4 key购买 nike

我正在使用 BLOb 支持从 MySQl 中插入和读取。(JDBC)我可以做到,但是当它读取时,它只有几 kb。我不知道为什么。这是工作代码:

 import java.sql.*;
import java.io.*;

public class InsertAndRetrieveImage {

public static void main(String[] args) throws SQLException, FileNotFoundException, IOException {
int id=7;
String connectionURL = "jdbc:mysql://127.0.0.1:3306/newdb";;
Connection con=null;
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(connectionURL, "root", "sesame");

PreparedStatement ps = null;

ps=con.prepareStatement("INSERT IGNORE INTO image VALUES(?,?,?)");

File file = new File("e:/anarkali.wav");


FileInputStream fs = new FileInputStream(file);

try{
System.out.println(fs.available());
ps.setInt(1,id);
ps.setBinaryStream(2,fs,fs.available());
String filen=file.getName();
ps.setString(3,filen);


int i = ps.executeUpdate();



String filename="filename";OutputStream os=null;byte[] content=null;
ps= con.prepareStatement("SELECT fs from image where id=7");
ResultSet rs = ps.executeQuery();
System.out.println(rs);
while(rs.next()) {


Blob blob = rs.getBlob("fs");

content = blob.getBytes(1, (int) blob.length());


os = new FileOutputStream(new File("e://testanar.wav"));

}
os.write(content);
os.close();
con.close();
ps.close();}
catch(SQLException e)
{System.out.println(e.getMessage());
}

}catch(Exception ex){}


}

读取或写入时出现问题吗?我的 BLOB 大小有点 65535。这是错误吗?

最佳答案

你的程序是正确的。如果文件很小,那么它可以正常工作。如果您使用 BLOB 数据类型来存储该二进制数据,请将其更改为 LONGBLOB。因为如果您尝试在 BLOB 数据字段中保存文件,并且如果文件大小超过 BLOB 数据类型的最大允许大小,那么内容将被截断并且您将丢失文件的一些内容(取决于关于文件大小)。即使您使用 LONGBLOB 数据类型,也有一些您必须检查的事项。我来解释

在mysql网站我们可以看到LONGBLOB的最大文件大小是4GB。但这取决于很多事情。要存储大文件,您必须检查一些事情。首先是在 my.ini 文件中,有一个名为 max_allowed_pa​​cket 的属性,它指定可以传输到 mysql 客户端或服务器的最大可能数据包。您应该将 max_allowed_pa​​cket 属性设置为更高的值。并重启mysql。一些文件系统不允许 4GB 的文件。在那种情况下,您无法加载那么大的文件。

我认为在您的情况下,将 max_allowed_pa​​cket 属性设置为更高的值可以解决问题。

我认为你可以使用下面的表创建脚本

CREATE TABLE `image` (
`id` INT(10) NULL DEFAULT NULL,
`fs` LONGBLOB NULL,
`filen` VARCHAR(50) NULL DEFAULT NULL
)

关于java - BLOB:无法读取所有数据,但只有几 kb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com