我想通过hibernate来存储图片,数据库是SQL-SERVER 2000,
JAVA类对应的类型是java.sql.Blob,
数据库类型用image,varbinary,binary
可以将图片成功保存,但是访问的时候总是出错:
Servlet.service() for servlet action threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported data conversion.*.hbm.xml文件如下
        <property name="pp" type="java.sql.Blob">
            <column name="pp" />
        </property>这个问题搞了3天了,还是搞不定
我想问一下,hibernate和java里面分别应该用什么类型?

解决方案 »

  1.   

    Mark.一下是数据类型对应表。Java数据类型 Hibernate数据类型 标准SQL数据类型
    (PS:对于不同的DB可能有所差异)
    byte、java.lang.Byte byte TINYINT
    short、java.lang.Short short SMALLINT
    int、java.lang.Integer integer INGEGER
    long、java.lang.Long long BIGINT
    float、java.lang.Float float FLOAT
    double、java.lang.Double double DOUBLE
    java.math.BigDecimal big_decimal NUMERIC
    char、java.lang.Character character CHAR(1)
    boolean、java.lang.Boolean boolean BIT
    java.lang.String string VARCHAR
    boolean、java.lang.Boolean yes_no CHAR(1)('Y'或'N')
    boolean、java.lang.Boolean true_false CHAR(1)('Y'或'N')
    java.util.Date、java.sql.Date date DATE
    java.util.Date、java.sql.Time time TIME
    java.util.Date、java.sql.Timestamp timestamp TIMESTAMP
    java.util.Calendar calendar TIMESTAMP
    java.util.Calendar calendar_date DATE
    byte[] binary VARBINARY、BLOB
    java.lang.String text CLOB
    java.io.Serializable serializable VARBINARY、BLOB
    java.sql.Clob clob CLOB
    java.sql.Blob blob BLOB
    java.lang.Class class VARCHAR
    java.util.Locale locale VARCHAR
    java.util.TimeZone timezone VARCHAR
    java.util.Currency currency VARCHAR
      

  2.   

    Pic3DAO p3DAO = new Pic3DAO();
    Pic3 showpp = (Pic3)p3DAO.findAll().get(0);
    就是这句就出错了,我还没进行数据的转换
    或者换成 Pic3 showpp = p3DAO.findById(1); 同样出错下面我贴出几个文件:POJO类 Pic3.java
    public class Pic3 implements java.io.Serializable {
    private Integer id;
    private Blob pp;
    /** default constructor */
    public Pic3() {
    }
    /** full constructor */
    public Pic3(Blob pp) {
    this.pp = pp;
    }
    // Property accessors
    public Integer getId() {
    return this.id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public Blob getPp() {
    return this.pp;
    }
    public void setPp(Blob pp) {
    this.pp = pp;
    }}DAO文件,Pic3DAO.java部分代码
            private static final Log log = LogFactory.getLog(Pic3DAO.class);
    public static final String PP = "pp";
            public Pic3 findById(java.lang.Integer id) {
    log.debug("getting Pic3 instance with id: " + id);
    try {
    Pic3 instance = (Pic3) getSession().get("com.xiang.table.Pic3", id);
    return instance;
    } catch (RuntimeException re) {
    log.error("get failed", re);
    throw re;
    }
    }
    public List findAll() {
    log.debug("finding all Pic instances");
    try {
    String queryString = "from Pic";
    Query queryObject = getSession().createQuery(queryString);
    return queryObject.list();
    } catch (RuntimeException re) {
    log.error("find all failed", re);
    throw re;
    }
    }还有Pic3.hbm.xml
    <hibernate-mapping>
        <class name="com.xiang.table.Pic3" table="pic3" schema="dbo" catalog="dmp_data">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="identity"></generator>
            </id>
            <property name="pp" type="java.sql.Blob">
                <column name="pp" />
            </property>
        </class>
      

  3.   

    楼上说对应关系
    java.sql.Blob blob BLOB 但是SQL-SERVER2000没有BLOB类型,难道无法保存图片或者使用HIBENATER?
      

  4.   

    一般只用一个varchar存放图片的路径,效率高,速度快,修改方便
      

  5.   

    终于找到了一种可以的对应关系,
    java 和hibernate都是用 byte[]类型,SQL-SERVER2000用 image类型谢谢大家关注