文档章节

JDBC--BLOB

大道无名
 大道无名
发布于 2016/07/02 16:45
字数 602
阅读 33
收藏 0

一、BLOB(二进制数据)

1. MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。

2.BLOB字段适用于存储大量的二进制数据,如图像、视频、音频,文件等。

3. MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的):

4. 实际使用中根据需要存入的数据大小定义不同的BLOB类型。需要注意的是:如果存储的文件过大,数据库的性能会下降。

二、存储和读取BLOB文件

(1)向数据库存储BLOB文件

主要操作:

InputStream inputStream = new FileInputStream("阿阮.jpg");
preparedStatement.setBlob(7,inputStream);

例:

    @Test
    public void test14() {
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        try {
            //获取数据库连接
            conn = JDBCTools.getConnection();
            //设置 SQL语句
            String sql = "INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept, S_entrance, S_picture) " +
                    "VALUES(?,?,?,?,?,?,?)";
            //为占位符赋值
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1, "201307081");
            preparedStatement.setString(2, "阿阮");
            preparedStatement.setString(3, "女");
            preparedStatement.setInt(4, 18);
            preparedStatement.setString(5, "GJ");
            preparedStatement.setDate(6, Date.valueOf("2013-07-08"));

            InputStream inputStream = new FileInputStream("阿阮.jpg");
            preparedStatement.setBlob(7,inputStream);
            //执行 SQL语句
            preparedStatement.executeUpdate();
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            JDBCTools.release(null,preparedStatement,conn);
        }
    }

(2)读取BLOB文件

主要操作:

Blob picture = resultSet.getBlob(7);
InputStream in = picture.getBinaryStream();
OutputStream out = new FileOutputStream("11.jpg");
byte [] buffer = new byte[1024];
for(int len = in.read(buffer); len != -1; len = in.read(buffer)) {
    out.write(buffer,0,len);
    out.flush();
}
out.close();
in.close();

例:

    @Test
    public void test15() {
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            //1. 获取连接
            conn = JDBCTools.getConnection();

            String sql = "SELECT * FROM Student " +
                    "WHERE Sname='阿阮'";

            //2. 获取Statement
            preparedStatement = conn.prepareStatement(sql);


            //4. 执行查询,得到ResultSet
            resultSet = preparedStatement.executeQuery();

            //5. 处理ResultSet
            while(resultSet.next()) {
                //按列读取
                String no = resultSet.getString(1);
                String name = resultSet.getString(2);
                String sex = resultSet.getString(3);
                int age = resultSet.getInt(4);
                String dept = resultSet.getString(5);
                Date entrance = resultSet.getDate(6);
                Blob picture = resultSet.getBlob(7);
                System.out.println(no+" "+name+" "+sex+" "
                        +age+" "+dept+" "+entrance);

                InputStream in = picture.getBinaryStream();
                OutputStream out = new FileOutputStream("11.jpg");
                byte [] buffer = new byte[1024];
                for(int len = in.read(buffer); len != -1; len = in.read(buffer)) {
                    out.write(buffer,0,len);
                    out.flush();
                }
                out.close();
                in.close();
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            JDBCTools.release(resultSet,preparedStatement,conn);
        }
    }

 

 

JDBC学习笔记:

1. 获取数据库连接    http://my.oschina.net/daowuming/blog/704243

2. 通过Statement执行更新、查询操作    http://my.oschina.net/daowuming/blog/704384

3. 使用PrepareStatement    http://my.oschina.net/daowuming/blog/704432

4. 使用ResultSetMetaData 对象处理结果集元数据    http://my.oschina.net/daowuming/blog/704487

5. 使用DatabaseMetaData获取数据库信息    http://my.oschina.net/daowuming/blog/704553

6. BLOB    ----当前----

7. 处理事务与隔离级别    http://my.oschina.net/daowuming/blog/704611

8. 批量处理    http://my.oschina.net/daowuming/blog/704641

9. 数据库连接池    http://my.oschina.net/daowuming/blog/704700

10. 调用函数与存储过程    http://my.oschina.net/daowuming/blog/704813

© 著作权归作者所有

共有 人打赏支持
大道无名
粉丝 29
博文 161
码字总数 96019
作品 0
宣城
程序员
私信 提问
小帅一点资讯版本更新,增加图片转字符图片功能

Java语言实现图片转字符图片 功能需要用到的工具类代码 https://gitee.com/xshuai/ai/blob/master/AIDemo/src/main/java/com/xs/util/image/AnimatedGifEncoder.java https://gitee.com/xsh......

小帅帅丶
2018/08/15
912
6
去IOE 遇到Jdbc mysql sql_mode的坑

在去IOE(IBM的小型机+Oracle的数据库+EMC的高端存储)的过程中遇到一个Oracle的建表语句(转换处理过后)具体语句如下: 通过Java的Jdbc执行后报错:BLOB/TEXT column 'FEXPRESSION' can't ...

adam_public
2018/08/15
0
0
JAVA读取Oracle中的blob图片字段并显示

整个流程分为四步,连接oracle数据库 -> 读取blob图片字段 -> 对图片进行缩放 ->把图片展示在jsp页面上。 下面进行详细描述: 1. java连接Oracle 注:数据库是Oracle10g版本为10.2.0, 在数据...

underA
2013/03/15
0
1
在Ignite上运行微服务:第二部分

在Ignite上运行微服务:第二部分 本文是系列文章的第二篇,这个系列会详细描述如何使用像Ignite这样的内存数据网格(IMDG)技术来构建容错和可扩展的微服务解决方案。在第一篇中,作为一个系...

李玉珏
2017/01/23
0
2
S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序

为了便于干净的初始化部署运行S2JH框架,采用了jdbc:initialize-database来从SQL脚本中初始化框架基础数据,其中遇到一个问题: 框架使用了Spring与Quartz集成以JDBC方式进行Cluster集群定时...

EntDIY
2014/04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部