jdbc 读写 blob 类型的数据
1 MySQL BLOB类型
-
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
-
插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。
-
MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的)
- 实际使用中根据需要存入的数据大小定义不同的BLOB类型。
- 需要注意的是:如果存储的文件过大,数据库的性能会下降。
- 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数: max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动mysql服务。
2 向数据表中插入大数据类型
//获取连接 Connection conn = JDBCUtils.getConnection(); String sql = "insert into customers(name,email,birth,photo)values(?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); //java项目www.fhadmin.org // 填充占位符 ps.setString(1, "张强"); ps.setString(2, "123@126.com"); ps.setDate(3, new Date(new java.util.Date().getTime())); // 操作Blob类型的变量 FileInputStream fis = new FileInputStream("xhq.png"); ps.setBlob(4, fis); //执行 ps.execute(); fis.close(); JDBCUtils.closeResource(conn, ps);
3 修改数据表中的Blob类型字段
Connection conn = JDBCUtils.getConnection(); String sql = "update customers set photo = ? where id = ?"; PreparedStatement ps = conn.prepareStatement(sql); //java项目www.fhadmin.org // 填充占位符 // 操作Blob类型的变量 FileInputStream fis = new FileInputStream("coffee.png"); ps.setBlob(1, fis); ps.setInt(2, 25); ps.execute(); fis.close(); JDBCUtils.closeResource(conn, ps);
4 从数据表中读取大数据类型
//java项目www.fhadmin.org String sql = "SELECT id, name, email, birth, photo FROM customer WHERE id = ?"; conn = getConnection(); ps = conn.prepareStatement(sql); ps.setInt(1, 8); rs = ps.executeQuery(); if(rs.next()){ Integer id = rs.getInt(1); String name = rs.getString(2); String email = rs.getString(3); Date birth = rs.getDate(4); Customer cust = new Customer(id, name, email, birth); System.out.println(cust); //读取Blob类型的字段 Blob photo = rs.getBlob(5); InputStream is = photo.getBinaryStream(); OutputStream os = new FileOutputStream("c.jpg"); byte [] buffer = new byte[1024]; int len = 0; while((len = is.read(buffer)) != -1){ os.write(buffer, 0, len); } JDBCUtils.closeResource(conn, ps, rs); if(is != null){ is.close(); } if(os != null){ os.close(); } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
鸿蒙的DFX子系统
作者:liangkz 更新时间:2021.05.05 我们仍然是先对子系统的目录结构做一次整理,做成表格,把模块之间的调用关系理一下: 1. Hi3861 平台如上表,上电后在SystemInit阶段会依次init:HiviewConfigInit、HiLogInit、hiview service: [system_init] HOS_SystemInit begin: %%%%%%%%%%% [system_init] MODULE_INIT(core)============================ [hiview_config] CORE_INIT_PRI(HiviewConfigInit, 0); [hiview_log] HiLogInit. CORE_INIT_PRI(HiLogInit, 0) [hiview_output_log] InitCoreLogOutput. call HiviewRegisterMsgHandle [system_init] SYS_INIT(service)============================ [hiv...
- 下一篇
安卓to鸿蒙系列:ButterKnife(一)
目录: 1、基础知识 2、写一个乞丐版的ButterKnife 3、总结 本文是关于ButterKnife的移植的第一篇: 先介绍基础知识,理解apt是什么,最终输出一个乞丐版BufferKnife注入工具。 这是读懂BufferKnife源码的基础。 第二篇占坑:具体讲解BufferKnife的移植。 基础知识 apt技术的实际应用: Android Databinding绑定view ButterKnife绑定view Dagger2注入变量 ARouter生成路由表 真的好多,很重要。apt就是生产力工具! 什么是apt? 通俗讲:apt就是javac对外开放的一个插件,使javac在编译期间获取注解(Annotation),并做出相应的处理(多数都是生成一些java代码)。 从上图可以看出apt处理的是 java源文件 ,在编译期介入。 与之对比的是asm之类的工具,处理的是字节码文件,在编译后期介入。 apt与javac的约定 apt与javac约定在META-INF/services/javax.annotation.processing.Processor文件中注册ap...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池