【Java数据库】CLOB BLOB 在数据库中存入/取出大量文本数据、二进制文件(图片)
CLOB(Character Large Object)
– 用于存储大量的文本数据
– 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的
方式来处理的。而非一般的字段,一次即可读出数据。
• Mysql中相关类型:
– TINYTEXT
最大长度为255(2^[8]–1)
字符的TEXT列。
– TEXT[(M)]
最大长度为65,535(2^[16]–1)
字符的TEXT列。
– MEDIUMTEXT
最大长度为16,777,215(2^[24]–1)
字符的TEXT列。
– LONGTEXT
最大长度为4,294,967,295或4GB(2^[32]–1)
字符的TEXT列
BLOB(Binary Large Object)
– 用于存储大量的二进制数据
– 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的
方式来处理的。而非一般的字段,一次即可读出数据。
• Mysql中相关类型:
– TINYBLOB
最大长度为255(2^[8]–1)
字节的BLOB列。
– BLOB[(M)]
最大长度为65,535(2^[16]–1)
字节的BLOB列。
– MEDIUMBLOB
最大长度为16,777,215(2^[24]–1)
字节的BLOB列。
– LONGBLOB
最大长度为4,294,967,295或4GB(2^[32]–1)
字节的BLOB列。
CLOB
从本地读取txt文件/字符串,将内容写入数据库
package cn.hanquan.jdbcTest;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;public class JDBCTest {public static void main(String[] args) throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {// 加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?serverTimezone=UTC", "root","123456");String sql = "insert into user (id,blog) values (?,?)";ps = conn.prepareStatement(sql);ps.setString(1, "高淇");// ps.setClob(2, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("这是一个字符串".getBytes()))));// 为了把字符串转换成流的方式ps.setClob(2, new FileReader(new File("c:/picture/test.txt")));ps.executeUpdate();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}
从数据库中取出字符串
package cn.hanquan.jdbcTest;import java.io.IOException;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;public class JDBCTest {public static void main(String[] args) throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {// 加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?serverTimezone=UTC", "root", "666666");String sql = "select * from user where id = ?";ps = conn.prepareStatement(sql);ps.setString(1, "高淇");rs = ps.executeQuery();while (rs.next()) {Clob c = rs.getClob("blog");Reader r = c.getCharacterStream();int temp = 0;// 输出取出结果while ((temp = r.read()) != -1) {System.out.print((char) temp);}}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}
输出
这是一个字符串
BLOB
虽然数据库提供了存放二进制文件的功能,但是在实际的开发过程中,大的视频、数据一般会放在文件服务器上,而不是放在数据库中。
代码示例:取出数据库中的Blob
package cn.hanquan.jdbcTest;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class JDBCTest {public static void main(String[] args) throws FileNotFoundException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;InputStream is = null;OutputStream os = null;try {// 加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?serverTimezone=UTC", "root", "123456");// 执行SQLString sql = "select * from user where id=?";ps = conn.prepareStatement(sql);ps.setString(1, "sxt");rs = ps.executeQuery();// 接收结果并存储到jpg文件while (rs.next()) {Blob b = rs.getBlob("headImg");is = b.getBinaryStream();os = new FileOutputStream("getimg.jpg");int temp = 0;while ((temp = is.read()) != -1) {os.write(temp);}}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 关闭流try {if (os != null) {os.close();}if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}
运行结果:成功保存jpg文件
以上只是在本地运行的例子。以后在服务器端的时候,还可以通过流向客户输出。
【Java数据库】CLOB BLOB 在数据库中存入/取出大量文本数据、二进制文件(图片)相关推荐
- mysql导入greenplum_greenPlum中通过gpfdist导入文本数据到数据库表中
1.python版本要求2.4.4以上 [root@test install]# python Python 2.6.2 (r262:71600, May 14 2009, 10:46:21) [GC ...
- java list map 去重复_Java中List集合去除重复数据的六种方法
1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...
- 最新实用版——JAVA使用POI替换Word模板中指定字符,并可插入图片。
JAVA替换Word模板指定字符,并可插入图片. 在一年之前还之前有写过一篇使用jacob对word插入图片的博客.点击率蛮高8800多次,当然多亏了百度搜索引擎的帮忙
- oracle 使从表中随机取出一行记录数据
四种解决方案:测试数据90万条方案一:使用dbms_random.random 对数据排序,然后取出第一条,不过这种效率太低,用时3-4秒.SELECT *FROM (SELECT * FROM TE ...
- vue3中使用vue-quill富文本编辑器 重写图片上传功能
最近开发的一个vue3+element-plus的项目,需要用到富文本编辑器,最终选择了VueQuill这一款轻便型的富文本编辑器. 说说遇到的问题:富文本编辑器的图片上传,默认是直接以base64图 ...
- 关系型数据库和非关系型数据库的区别与联系
数据库 一.概念 数据库是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与应用程序彼此独立的数据集合. 数据库管理系统是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称 ...
- java异常类中属于非检测异常的是_下列java语言的常用异常类中,属于检测异常的是()_学小易找答案...
[单选题]在Word 2010的编辑状态,对当前文档中的文字进行"字数统计"操作,应当使用的菜单是( ) [单选题]客运员领带统一,领带夹夹在衬衣的( )钮扣之间. [单选题]文件 ...
- java 接口重载_java,_java 接口中如何声明类似于重载的方法?,java - phpStudy
java 接口中如何声明类似于重载的方法? 我们的作业要写一个web宠物医院管理系统,因为医生.客户等都包含浏览.添加.删除操作,所以对于service层,我希望有个统一的接口以供servlet中的类 ...
- python中气泡图文字标签_Excel中制作气泡图及为气泡图的系列数据点添加文本数据标签...
Excel中制作气泡图及为气泡图的系列数据点添加文本数据标签 时间:2014-08-01 作者:snow 来源:互联网 Excel中的散点图可以显示两组数据之间的关系,而气泡图则可以显示三组数 ...
最新文章
- 认清自己,愉快度过每一天
- 在.net中使用GDI+来提高gif图片的保存画质
- 提高PHP编程效率的53个要点(转)
- golang 代码安全审计
- 找出数组中两个只出现一次的数字
- python pandas 读取excel 去重某一列_Python中Pandas读取修改excel操作攻略(代码示例)...
- Maven——常用命令详解
- url的特殊字符编码 encodeURI编码
- 使用jquery对特殊字符进行转义,防止js注入
- KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]
- “宇宙最强”GPU —— NVIDIA Tesla V100 面向开发者开放试用!
- surfer 8 scripter 学习笔记(9)surfer与VB结合的VB源代码
- VSS 2005,项目解决方案重新签入管理的方法
- 如何检查电脑是否已经安装Flash Player
- Excel 函数公式大全
- 如何使用CH340G模块给51单片机下载程序
- 利用npn开关电路,将stm32 IO口输出的0-3.3v的pwm波转换为0-5v的pwm波
- 数据结构---线性表
- 阿里、京东、字节跳动春招,Java岗offer不好拿?一文带你搞定
- 报错ValueError: operands could not be broadcast together with shapes (448,448) with (224,224)