java - 如何使用hibernate从数据库中检索blob值?

标签 java mysql hibernate hql

我正在开发一个桌面应用程序,我使用 Hibernate 连接 mySql 数据库,在该数据库中,表没有主键。所以我得到的 pojo 类有两个 java 文件。 pojo 类是,

package pojo;
public class Entries implements java.io.Serializable {

    private EntriesId id;

    public Entries() {
    }

    public Entries(EntriesId id) {
        this.id = id;
    }

    public EntriesId getId() {
        return this.id;
    }

    public void setId(EntriesId id) {
        this.id = id;
    }

}

//POJO2

package pojo;

import java.util.Arrays;
import java.util.Date;

public class EntriesId implements java.io.Serializable {

    private String userid;
    private String name;
    private Integer ver;
    private String bexval;
    private String boidval;
    private Integer empid;
    private String fieldname;
    private byte[] fieldvalue;
    private Date lstdatetime;

    public EntriesId() {
    }

    public EntriesId(String userid, String name, Integer ver, String bexval,
            String boidval, Integer empid, String fieldname, byte[] fieldvalue,
            Date lstdatetime) {
        this.userid = userid;
        this.name = name;
        this.ver = ver;
        this.bexval = bexval;
        this.boidval = boidval;
        this.empid = empid;
        this.fieldname = fieldname;
        this.fieldvalue = fieldvalue;
        this.lstdatetime = lstdatetime;
    }}

我将从数据库中检索值,

Session session=null;
    Transaction tx=null;
    try{
        session=HibernateUtil.getSessionFactory().openSession();
        tx=session.beginTransaction();
        Query q=session.createQuery("select a.id.fieldvalue,count(a.id.fieldvalue) from Entries as a where a.id.lstdatetime between '2015-08-01' and '2015-08-24' and a.id.fieldname='*NAME' group by a.id.fieldvalue");
        List<Object[]> list=(List<Object[]>) q.list();
        System.out.println("List size :"+list.size());
        for(Object[] obj:list)
        {
            System.out.println(obj[0]);
            System.out.println(obj[1]);

        }
        tx.commit();
        session.close();
    }catch(Exception e)
    {
        System.out.println("Exception found here :"+e);
    }

在检索值时,我从 obj[1] 获取值,但在 obj[0] 中获取的是对象而不是值。我怎样才能得到原始数据?任何人都可以帮我找回值(value)。

最佳答案

在 Hibernate 中,fieldvalue 列表示为 byte[],在检索值时我直接打印 obj[0] 所以我获取字节数组作为值。要获取值,需要将 obj[0] 转换为字符串。

for(Object[] obj:list)
{
    byte ptext[] = (byte[])obj[0];
    String value = new String(ptext);
    System.out.println(obj[1]+" : "+value);
}

关于java - 如何使用hibernate从数据库中检索blob值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326903/

相关文章:

java - Hibernate OneToMany 与 OrderBy 生成无效 SQL

java - Java 中的 Mysql 日期格式

java - 尝试重新打开已经关闭的对象 : SQLiteDatabase

mysql - Mac 操作系统优胜美地 : How to start mysql and connect Sequel Pro?

java - 需要了解Hibernate配置的transaction.factory_class

java - org.hibernate.MappingException : Could not determine t ype for: com. yammer.dropwizard.tailor.model.CustomerModel

java - 关于时间戳的格式

java - 错误: Could not find or load main class when trying to run a java program on command line

mysql - Docker:使用来自主机的--net = host选项访问docker容器中的mysql

python - Azure 应用服务导入错误 : libmysqlclient. so.18:无法打开共享对象文件:没有这样的文件或目录