mysql blob无法显示二进制文件_java实现插入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.0mysql-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服务器,这样就不会出现下面的异常了。

复制代码 代码如下:com.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 com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2632)

at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2618)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1551)

at com.mysql.jdbc.ServerPreparedStatement.storeStream(ServerPreparedStatement.java:2180)

at com.mysql.jdbc.ServerPreparedStatement.serverLongData(ServerPreparedStatement.java:1199)

at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1004)

at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:670)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1159)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1076)

at com.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

* 热点聚合:

©CopyRight 2010-2020 EASCK.COM Inc All Rights Reserved. 易采站长站 版权所有

微信扫一扫

d7b2d4afa52a5197e0e332e6c15af170.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值