美文网首页
Hibernate学习6(长文本与二进制文件保存读取)

Hibernate学习6(长文本与二进制文件保存读取)

作者: 又是那一片天 | 来源:发表于2017-08-08 11:41 被阅读0次
在数据表对应的实体内中长文本与二进制文件对应的属性为:
  • 长文本对应String类型
  • 二进制文件对应 Blob类型(java.sql.Blob)
    //长文本
    private String context;
    //二进制
    private Blob img;
在配置文件中 通过property标签的 type属性设置:
  • 二进制文件 type="blob"
  • 长文本 "clob"
  • 两者可以通过property标签sql-type属性进行精确指定
    <!--二进制 -->
    <property name="img" type="blob"></property>
    <!-- 长文本 -->
    <!-- <property name="context" type="clob"></property> -->
    <!-- 长文本 精确指定 -->
    <property name="context">
        <column name="CONTEXT" sql-type="mediumtext"></column>
    </property>

代码中使用:

长文本和普通文本方式一样

  • 二进制文件存放数据库
    主要解决Blob对象如何得来可以使用Hibernate提供的工具
    /**
     * test二进制保存
     */
    public static void testSaveBlob() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = new News("上海", "好久没有下雨", new Date(new Date().getTime()));
        news.setContext("我的长文本");
        // 二进制保存
        try {
            //文件输入流
            InputStream stream = new FileInputStream("xxxxx.png");
            Blob img = Hibernate.getLobCreator(session).createBlob(stream, stream.available());
            news.setImg(img);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //保存
        session.save(news);
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
  • 二进制文件从数据库中读取
    通过获取数据库Blob对象获取流
    /**
     * test二进制读取
     */
    public static void testGetBlob() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        //获取记录
        News news = session.get(News.class, 2);
        //获取记录中二进制
        Blob img = news.getImg();
        try {
            //获取对应流
            InputStream in = img.getBinaryStream();
            System.out.println(in.available());
            in.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // 获取流

        transaction.commit();
        session.close();
        sessionFactory.close();
    }

相关文章

  • Hibernate学习6(长文本与二进制文件保存读取)

    在数据表对应的实体内中长文本与二进制文件对应的属性为: 长文本对应String类型 二进制文件对应 Blob类型(...

  • node基本模块之fs

    异步方式 读取文本文件 读取二进制文件

  • Python 读写文件

    如何使用python在硬盘上创建,读取和保存文件文件分类:纯文本文件二进制文件 windows:根文件夹名为C:,...

  • Python IO 流

    转载请注明出处 读文件 读取整个文件 分段读取 按行读取代码 按行读取 二进制读取 写文件 文本写出 追加文件 二...

  • 10-文件的操作

    文本文件和二进制文件 文本文件可以使用文本编辑器查看,本质还是二进制文件。二进制文件保存的文件不是给人直接阅读的,...

  • 进击的NDK04-文件IO

    读取文本文件 写入文本文件 计算机的文件存储在物理上都是二进制 文本文件和二进制之分,其实是一个逻辑之分C读写文本...

  • Python文件操作,看这篇就足够!

    文件的存储方式 在计算机中,文件是以二进制的方式保存在磁盘上的文本文件和二进制文件 文本文件可以使用文本编辑软件查...

  • Android数据存储——持久化技术

    三种简单的数据持久化技术 一、文件存储 保存文本到文件 从文件中读取文本 二、SharedPreferences存...

  • FBX相关

    发现有两种格式的fbx,一种内容无法读取,另一种可以以文本方式读取 在使用Maya保存fbx文件时,发现有二进制和...

  • C语言 IO操作

    读取文件 写入文本文件 文件复制 计算机的文件存储在物理上都是二进制 文本文件和二进制之分,其实是一个逻辑之分 C...

网友评论

      本文标题:Hibernate学习6(长文本与二进制文件保存读取)

      本文链接:https://www.haomeiwen.com/subject/uzhtrxtx.html