java实现插入mysql二进制文件,blob类型,遇到问题
网络编程 2021-07-05 15:27www.168986.cn编程入门
mysql插入二进制文件,blob类型,遇到问题及解决办法
是数据库建立要准备的
我们要把放置二进制字段设置为Blob类型,根据文件的大小选择合适的Blob类型,一下是各个Blob类型所能容纳二进制文件的大小
MySQL的四种BLOB类型
类型 大小(单位字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
一下是具体操作代码
/
把二进制文件(该二进制文件可以是本地硬盘路径,也可以是一个网络路径)存入数据库
create date:2009-5-13 author:Administrator
@param file
可以是本地文件也可以是网络文件
@param conn
/
public void saveBinary(String file, Connection conn) {
// 注意二进制文件写入数据库时所用到的类,以及类包装转换过程
File f = null;
if (file.toLowerCase().contains("http:"))
f = DownLoadWithUrl.downLoadFile(file);
else
f = new File(file);
if (f != null) {
try {
InputStream is = new FileInputStream(f);
PreparedStatement ps = conn
.prepareStatement("insert into bankVoice(name,text) values (?,?)");
ps.setString(1, file);
int i = is.available();
ps.setBinaryStream(2, is, is.available());
ps.executeUpdate();
System.out.println("二进制文件插入成功");
ps.clearParameters();
ps.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("二进制文件插入时出现异常");
}
}
}
注意在操作时候会出现以下异常,那么我们只需做一下设置以我本地为例进入D:\MySql5.0\mysql-5.0.51b-win32 目录,有以下文件可以看到my-large.ini、my-small.ini、my-medium.ini、my-huge.ini
我们把只需把mysql服务现在加载的ini文件中的配置项max_allowed_packet 改为 16M
即是max_allowed_packet = 16M 默认的是1M我们改为16M,然后重启mysql服务器,这样就不会出现狼蚁网站SEO优化的异常了。
.mysql.jdbc.PacketTooBigException: Packet for query is too large (1048587 > 1047552). You can change this value on the server by setting the max_allowed_packet' variable.
at .mysql.jdbc.MysqlIO.send(MysqlIO.java:2632)
at .mysql.jdbc.MysqlIO.send(MysqlIO.java:2618)
at .mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1551)
at .mysql.jdbc.ServerPreparedStatement.storeStream(ServerPreparedStatement.java:2180)
at .mysql.jdbc.ServerPreparedStatement.serverLongData(ServerPreparedStatement.java:1199)
at .mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1004)
at .mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:670)
at .mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1159)
at .mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1076)
at .mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1061)
at SaveBinaryToDB.SaveBinaryToDB.saveBinary(SaveBinaryToDB.java:33)
at SaveBinaryToDB.SaveBinaryToDB.main(SaveBinaryToDB.java:17)
/
从数据库中读取二进制文件 create date:2009-5-13 author:Administrator
@param file
@param conn
/
public void getBinary(String file, Connection conn) {
// 注意二进制文件从数据库中读取时所用到的类,以及类的包装转换过程
try {
PreparedStatement ps = conn
.prepareStatement("select text from bankVoice where name=?");
ps.setString(1, file);
Blob blob = null;
ResultSet rs = ps.executeQuery();
if (rs.next()) {
blob = (Blob) rs.getBlob("text");
}
FileOutputStream fos = new FileOutputStream("D:\\test1.mp3");
fos.write(blob.getBytes(1, (int) blob.length()));
System.out.println("二进制文件获得成功");
ps.clearParameters();
ps.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("二进制文件读取时出现异常");
}
}
package SaveBinaryToDB;
/
本程序的功能实现网络下载
把指定url的文件下载到本地硬盘
/
import java.io.;
import java..;
/
@todo 将网上获取的图像,mp3等文件存储到本地
@version 1.0
/
public class DownLoadWithUrl {
public static File downLoadFile(String fromUrl) {
URL url;
File file = null;
try {
// url = new
// URL("http://count.koubei./showphone/showphone.php?f=jpg&w=96&h=10&bc=255,255,255&fc=0,0,0&fs=10&fn=arial&phone=NzMwNzIyNTE1%236aWCXtTNZYkxASrj");
url = new URL(fromUrl);
URLConnection uc = url.openConnection();
InputStream is = uc.getInputStream();
// 根据下载文件类型的不同,进行相应的文件命名
file = new File("D:\\forever.mp3");
FileOutputStream out = new FileOutputStream(file);
/
该注释内的也是一种写入文件的方法,不过通常下载mp3或者比mp3更小图片
等这些文件用这种带缓冲的方法写文件比较慢,所以说小文件下载通常用狼蚁网站SEO优化 的写文件方法就可以了 // byte[] b = new
byte[1024003]; // int size = 0; // // while ((size = is.read(b)) !=
-1) { // out.write(b, 1, size); // // }
/
int i = 0;
while ((i = is.read()) != -1) {
out.write(i);
}
out.flush();
is.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file;
}
/
删除本地磁盘指定路径的文件 create date:2009-5-13 author:Administrator
@param file
/
public static void delFile(String file) {
File f = new File(file);
if (f.exists())
f.delete();
System.out.println(file + "已经被删除");
}
public static void main(String[] args) {
// delFile("D:\\forever.mp3");
downLoadFile("");
}
}
我们要把放置二进制字段设置为Blob类型,根据文件的大小选择合适的Blob类型,一下是各个Blob类型所能容纳二进制文件的大小
MySQL的四种BLOB类型
类型 大小(单位字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
一下是具体操作代码
代码如下:
/
把二进制文件(该二进制文件可以是本地硬盘路径,也可以是一个网络路径)存入数据库
create date:2009-5-13 author:Administrator
@param file
可以是本地文件也可以是网络文件
@param conn
/
public void saveBinary(String file, Connection conn) {
// 注意二进制文件写入数据库时所用到的类,以及类包装转换过程
File f = null;
if (file.toLowerCase().contains("http:"))
f = DownLoadWithUrl.downLoadFile(file);
else
f = new File(file);
if (f != null) {
try {
InputStream is = new FileInputStream(f);
PreparedStatement ps = conn
.prepareStatement("insert into bankVoice(name,text) values (?,?)");
ps.setString(1, file);
int i = is.available();
ps.setBinaryStream(2, is, is.available());
ps.executeUpdate();
System.out.println("二进制文件插入成功");
ps.clearParameters();
ps.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("二进制文件插入时出现异常");
}
}
}
注意在操作时候会出现以下异常,那么我们只需做一下设置以我本地为例进入D:\MySql5.0\mysql-5.0.51b-win32 目录,有以下文件可以看到my-large.ini、my-small.ini、my-medium.ini、my-huge.ini
我们把只需把mysql服务现在加载的ini文件中的配置项max_allowed_packet 改为 16M
即是max_allowed_packet = 16M 默认的是1M我们改为16M,然后重启mysql服务器,这样就不会出现狼蚁网站SEO优化的异常了。
代码如下:
.mysql.jdbc.PacketTooBigException: Packet for query is too large (1048587 > 1047552). You can change this value on the server by setting the max_allowed_packet' variable.
at .mysql.jdbc.MysqlIO.send(MysqlIO.java:2632)
at .mysql.jdbc.MysqlIO.send(MysqlIO.java:2618)
at .mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1551)
at .mysql.jdbc.ServerPreparedStatement.storeStream(ServerPreparedStatement.java:2180)
at .mysql.jdbc.ServerPreparedStatement.serverLongData(ServerPreparedStatement.java:1199)
at .mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1004)
at .mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:670)
at .mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1159)
at .mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1076)
at .mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1061)
at SaveBinaryToDB.SaveBinaryToDB.saveBinary(SaveBinaryToDB.java:33)
at SaveBinaryToDB.SaveBinaryToDB.main(SaveBinaryToDB.java:17)
/
从数据库中读取二进制文件 create date:2009-5-13 author:Administrator
@param file
@param conn
/
public void getBinary(String file, Connection conn) {
// 注意二进制文件从数据库中读取时所用到的类,以及类的包装转换过程
try {
PreparedStatement ps = conn
.prepareStatement("select text from bankVoice where name=?");
ps.setString(1, file);
Blob blob = null;
ResultSet rs = ps.executeQuery();
if (rs.next()) {
blob = (Blob) rs.getBlob("text");
}
FileOutputStream fos = new FileOutputStream("D:\\test1.mp3");
fos.write(blob.getBytes(1, (int) blob.length()));
System.out.println("二进制文件获得成功");
ps.clearParameters();
ps.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("二进制文件读取时出现异常");
}
}
package SaveBinaryToDB;
代码如下:
/
本程序的功能实现网络下载
把指定url的文件下载到本地硬盘
/
import java.io.;
import java..;
/
@todo 将网上获取的图像,mp3等文件存储到本地
@version 1.0
/
public class DownLoadWithUrl {
public static File downLoadFile(String fromUrl) {
URL url;
File file = null;
try {
// url = new
// URL("http://count.koubei./showphone/showphone.php?f=jpg&w=96&h=10&bc=255,255,255&fc=0,0,0&fs=10&fn=arial&phone=NzMwNzIyNTE1%236aWCXtTNZYkxASrj");
url = new URL(fromUrl);
URLConnection uc = url.openConnection();
InputStream is = uc.getInputStream();
// 根据下载文件类型的不同,进行相应的文件命名
file = new File("D:\\forever.mp3");
FileOutputStream out = new FileOutputStream(file);
/
该注释内的也是一种写入文件的方法,不过通常下载mp3或者比mp3更小图片
等这些文件用这种带缓冲的方法写文件比较慢,所以说小文件下载通常用狼蚁网站SEO优化 的写文件方法就可以了 // byte[] b = new
byte[1024003]; // int size = 0; // // while ((size = is.read(b)) !=
-1) { // out.write(b, 1, size); // // }
/
int i = 0;
while ((i = is.read()) != -1) {
out.write(i);
}
out.flush();
is.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file;
}
/
删除本地磁盘指定路径的文件 create date:2009-5-13 author:Administrator
@param file
/
public static void delFile(String file) {
File f = new File(file);
if (f.exists())
f.delete();
System.out.println(file + "已经被删除");
}
public static void main(String[] args) {
// delFile("D:\\forever.mp3");
downLoadFile("");
}
}
上一篇:mysql 控制台操作
下一篇:Mysql my.ini 配置文件详解
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程