我使用mysql
作为我的数据库。我在我的java代码中获取字节数组。然后我将此字节数组存储在数据库中LONGBLOB
。现在,当从db中检索它时,我使用下面的代码:
package com.sendSms;
import java.awt.image.BufferedImage;
import java.io.*;
import java.sql.*;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
public class SampleTest {
public Connection getConnection(){
Connection con=null;
try{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/forTest","root","123456");
}catch(Exception ex){}
return con;
}
public byte[] getFromDb(){
byte[] arr=null;
try{
Connection con = getConnection();
PreparedStatement pstmt=con.prepareStatement("select id,image from TestAndroid where id = ?");
pstmt.setInt(1, 16);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
// int id=rs.getInt("id");
arr = rs.getBytes("image");
}
}
catch(Exception ex){ex.printStackTrace();}
return arr;
}
public void go() throws IOException{
byte[] arr=getFromDb();
InputStream is=new ByteArrayInputStream(arr);
BufferedImage bi= ImageIO.read(is);
if(bi==null){
System.out.println("bi is NULL");
}
else{
System.out.println("bi is NOT NULL");
}
}
public static void main(String[] args) throws IOException {
SampleTest st = new SampleTest();
st.go();
}
}
当我运行此代码时,我将BufferedImage
视为null;虽然此时字节数组不是Null。怎么能得到这个BufferedImage
。我需要BufferedImage
,因为我需要将它传递给其他只接受BufferedImage的函数。我该如何解决这个问题。
同样在db中存储字节数组时,我正在使用:
setBytes(byte array)
&上的 PreparedStatement
方法在Db中我使用LONGBLOB
数据类型来存储这个字节数组。
答案 0 :(得分:1)
ImageIO.read(InputStream is)方法的javadoc声明:
如果没有已注册的ImageReader声称能够读取生成的流,则返回null。
可能是您的字节数组不代表有效的图像格式?