博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC--BLOB
阅读量:6903 次
发布时间:2019-06-27

本文共 3630 字,大约阅读时间需要 12 分钟。

hot3.png

一、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. 获取数据库连接    

2. 通过Statement执行更新、查询操作    

3. 使用PrepareStatement    

4. 使用ResultSetMetaData 对象处理结果集元数据    

5. 使用DatabaseMetaData获取数据库信息    

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

7. 处理事务与隔离级别    

8. 批量处理    

9. 数据库连接池    

10. 调用函数与存储过程    

转载于:https://my.oschina.net/daowuming/blog/704593

你可能感兴趣的文章
《高性能MySQL》 读书总结
查看>>
ELK批量删除索引
查看>>
Apache Spark源码走读之9 -- Spark源码编译
查看>>
Selenium-WebDriverApi接口
查看>>
Android-Activity-Dialog theme touch outsize
查看>>
escape()、encodeURI()、encodeURIComponent()区别详解
查看>>
多线程编程之嵌套锁
查看>>
多线程编程之Linux环境下的多线程(二)
查看>>
五、重绘与回流
查看>>
c#SQLserver数据类型
查看>>
2018-2019 20165208 网络对抗 Exp2 后门原理与实践
查看>>
Linux mysql 安装
查看>>
rabbitmq之window环境启动
查看>>
` 模板字符串,告别打印输出多行
查看>>
20172307 2017-2018-2 《程序设计与数据结构》实验1报告
查看>>
Nginx常用命令
查看>>
转载:qsort细节用法,double型的排序我竟然一直用错了~~~
查看>>
C盘清理记——罪魁Visual Studio
查看>>
数据库 (二):MySQL密码策略与用户管理
查看>>
圈复杂度(Cyclomatic Complexity)
查看>>