网上有很多介绍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包了,记录在此做个纪念。
本文介绍了在使用mysql-connector-java-3.1.12-bin.jar时遇到的图片存储问题,并提供了解决方案,即使用setBytes()替代setBinaryStream()方法。

被折叠的 条评论
为什么被折叠?



