过程:
- 建立数据库中 blob类型字段 (存储二进制大文件)。
- java建立数据库连接。
- java将所需上传文件,转成文件流(FileInputStream)。
- 使用sql将文件流进行插入。(PreparedStatement.setBinaryStream)
细节:
mysql sql语句:
CREATE TABLE `app` (
`apk_name` varchar(150) default NULL,
`apk_version` varchar(50) default NULL,
`gexf` longblob,
`apk_file` longblob
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
java code:
public void insertBlobInfo(String sql , File dataFile) throws IOException{
try {
PreparedStatement prestmt = con.prepareStatement(sql);
FileInputStream fis = new FileInputStream(dataFile);
prestmt.setBinaryStream(1,fis,(int)dataFile.length()); //将文件流与数据库对接。
prestmt.executeUpdate();
System.out.println(" blob insert successful~");
fis.close();
} catch (SQLException e) {
ExceptionLog(e);
}
}
遇到问题:
Q1:遇到异常, You can change this value on the server by setting the max_allowed_packet variable.
解决办法:
1.“max_allowed_packet ” 用来限制server接受的数据包大小。
2.mysql中存在许多变量,用来限制程序。(适当了解常用变量的作用)
# 显示变量的信息。
show VARIABLES like '%max_allowed_packet%';
# 设置变量数值。
set GLOBAL max_allowed_packet=11048576;
<pre class="cmd">#set global max_allowed_packet = 2*1024*1024*10 #(更清晰)
注意 :set global max_allowed_packet=500M; ( 在我mysql上无法识别 )