数据库中的userPic的类型为Image,java中实体类的类型为Blob。将图片存入数据库的时候出现异常。
请路过此地的各位大侠拔刀相助。帮小弟解决困难,以下是相关代码。
if (user.getUserPic() != null) {
// 得到项目路径
String dirPath = System.getProperty("user.dir");
String s = dirPath.replace("bin", "");
// 用来存储照片的文件路径(完整路径)
String picPath = s + "webapps\\Dcu32X_BS\\avatar\\"
+ user.getId() + ".jpg";
// 创建目录
// CreateFileUtil.createDir(dirPath);
// 创建文件
CreateFileUtil.CreateFile(picPath);
// 远程访问路径
user.setPicPath("/avatar/" + user.getId() + ".jpg");
Blob photo = user.getUserPic();
InputStream in = null;
try {
in = photo.getBinaryStream();
} catch (SQLException e1) {
e1.printStackTrace();
}
// 用来存储照片数据的缓冲区
byte[] buf = new byte[1024];
FileOutputStream out;
try {
out = new FileOutputStream(picPath);// 写入图片数据
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }action中的方法 public String addUsers() throws Exception {
String rs = null;
if (f!=null) {
FileInputStream fis = new FileInputStream(getF());
Blob b = Hibernate.createBlob(fis);
System.out.println("bbbbbbbb"+b);
user.setUserPic(b);
System.out.println("图片:"+user.getUserPic());
System.out.println("姓名:"+user.getUserName());
}
boolean bool = userManageBiz.addUsers(user);
if (bool) {
rs = SUCCESS;
}else {
rs = ERROR;
}
return rs;
}报出的异常为:util.JDBCExceptionReporter - 数据类型 image 和 varbinary(max) 在 equal to 运算符中不兼容。

解决方案 »

  1.   

    你hibernate里blob字段类型是什么
    没用spring吗
      

  2.   

            <property name="userPic" type="java.sql.Blob">
                <column name="UserPic" />
            </property>
      

  3.   

     user的  userPic  该为 byte[] 类型 不是blob
      

  4.   

    实体类里面的类型?     private Blob userPic; 改为private byte[] userPic?
      

  5.   

    // 远程访问路径
    user.setPicPath("/avatar/" + user.getId() + ".jpg");
    Blob photo = user.getUserPic(); //那这个怎么转换呢?
    InputStream in = null;
      

  6.   

    你为什么要转换 bolb呢
    你要的是 InputStream  转化成 InputStream  网上找
      

  7.   

    你这代码乱遭的  到底是写图片出错 还是 读图片出错if (f!=null) {FileInputStream f = new FileInputStream(getF());
    byte[] data = new byte[(int) f.available()];
    BufferedInputStream bis = new BufferedInputStream(f);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(
    baos);k = 0;
    while ((k = bis.read()) != -1) {
    bos.write(k);
    }
    bos.flush(); // 提交文件流,很关键
    bis.close();
    user.setUserPic(baos.toByteArray());System.out.println("图片:"+user.getUserPic());
    System.out.println("姓名:"+user.getUserName());
    }
    boolean bool = userManageBiz.addUsers(user);
    if (bool) {
    rs = SUCCESS;
    }else {
    rs = ERROR;
    }
    return rs;
    }
      

  8.   

    将图片存入数据库的时候出错,报出的异常为:util.JDBCExceptionReporter - 数据类型 image 和 varbinary(max) 在 equal to 运算符中不兼容。大哥。小弟没什么经验啊。当然没前辈写的代码规范啊
      

  9.   

    if (f!=null) {FileInputStream f = new FileInputStream(getF());
                                byte[] data = new byte[(int) f.available()];
                                BufferedInputStream bis = new BufferedInputStream(f);
                                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                                BufferedOutputStream bos = new BufferedOutputStream(
                                        baos);k = 0;
                                while ((k = bis.read()) != -1) {
                                    bos.write(k);
                                }
                                bos.flush(); // 提交文件流,很关键
                                bis.close();
                                user.setUserPic(baos.toByteArray());System.out.println("图片:"+user.getUserPic());
    System.out.println("姓名:"+user.getUserName());
    }
    boolean bool = userManageBiz.addUsers(user);
    if (bool) {
    rs = SUCCESS;
    }else {
    rs = ERROR;
    }
    return rs;
    }
    前辈,这个data没有用到?
      

  10.   

    // 远程访问路径
    user.setPicPath("/avatar/" + user.getId() + ".jpg");
    Blob photo = user.getUserPic();InputStream in = null;
    try {
    in = photo.getBinaryStream();} catch (SQLException e1) {
    e1.printStackTrace();
    }
    // 用来存储照片数据的缓冲区
    byte[] buf = new byte[1024];
    FileOutputStream out;
    这个地方也是用Byte?那下面调用byte的什么方法?请前辈指导
      

  11.   

    data 没用。user.setUserPic(baos.toByteArray());也可以直接  user.setUserPic(file.getBytes());你要写图片?java.io.ByteArrayInputStream   b=new   java.io.ByteArrayInputStream(byte[]); 
      

  12.   

    应该不行的吧!我现在的做法是转成字节流,再写sql直接保存。