使用java向MySQL存储图片遇到的问题及解决

本文介绍了在使用mysql-connector-java-3.1.12-bin.jar时遇到的图片存储问题,并提供了解决方案,即使用setBytes()替代setBinaryStream()方法。

         网上有很多介绍MySQL图片读写的代码帖及博客,思路基本上都一致,具体代码可随意去搜索一个查看,在此介绍我遇到的问题。

        代码大致如斯:

        ......

        Connection conn = null;

        PrepareStatement ps = null;

        InputStream in = null;

        try{

                conn = //此处省略自定义的,返回值为Connection类型的,获取MySQL连接的函数。

                in = new FileInputStream("G:\\01.png");

                ps = conn.prepareStatement("insert into table_name(id,photo) values(?,?)");

                ps.setInt( 1, 2);  //将第一个?替换成int型数据2

                ps.setBinaryStream( 2, in, in.available);   //将第二个?替换成二进制数据流in

                ps.excuteUpdate();

                in.close();

                conn.close();

        }catch( SQLEXception e){

                e.printStackTrace();

        }

       ......

       运行环境:

       mysql-connector-java-3.1.12-bin.jar

       sqljdbc4.jar(与此jar无关)

       运行结果:

       java.sql.SQLException: Incorrect arguments to mysql_stmt_execute


      如果使用高版本的mysql jar包,则没有问题,比如

      mysql-connector-java-5.1.39-bin.jar


     如果不想改jar包版本怎么办?

     放弃使用setBinaryStream()方法,而代之以setBytes()方法

                in = new FileInputStream("G:\\01.png");

                btte[ ] buffer = new byte[in.available()];

                in.read(buffer);

                ps.setBytes( 2, buffer);


      估计都没有人再会用低版本的mysql jar包了,记录在此做个纪念。

     


       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值