写在前面
写这片文章是缘于在网上看到几篇关于在MYSQL写入图片遇到乱码时的问题,刚好最近在写相关的代码,就列出几个解决的方法(虽然现实中是很少直接写入图片这种大数据的,但各数据库厂商在技术上是完全可以实现的.
打开数据库
String dbType="mysql.";
Properties pros=new Properties();
pros.load(new FileInputStream("src/db.properties"));
Class.forName(pros.getProperty(dbType.concat(DRIVER)));
Connection conn=DriverManager.getConnection(
pros.getProperty(dbType.concat(URL)),pros.getProperty(dbType.concat(USERNAME)),pros.getProperty(dbType.concat(PASSWORD)));
PreparedStatement pstmt=conn.prepareStatement("update dummy set image=? where username=?");
方法一
在原文无出现乱码情况下,是可以直接将输入流传入PreparedStatement.setBlob(index,inputStream)的.
FileInputStream fis=new FileInputStream(file);
pstmt.setBlob(1, fis);
下面开始主题,在出现乱码情况:
方法二
创建一个空的blob,并将输入流写入blob,这也是spring源码的方法之一,关于inputStream写到outputStream,我们还可以使用spring的org.springframework.util.FileCopyUtils.copy(input,output)代替,还可以省去流的关闭操作.
并且,该方法是在不出现写入乱码情况下是可以通用的,但在oracle下有点区别:
如果使用的ojdbc14.jar时,需用oracle自定义的BLOB(大写)创建一个空的blob,而不能用Connection,oracle的Connection实现类是没有createBlob()方法的.
如果使用ojdbc6.jar的话,则