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 在数据库中存入/取出大量文本数据、二进制文件(图片)相关推荐

  1. 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 ...

  2. java list map 去重复_Java中List集合去除重复数据的六种方法

    1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...

  3. 最新实用版——JAVA使用POI替换Word模板中指定字符,并可插入图片。

    JAVA替换Word模板指定字符,并可插入图片. 在一年之前还之前有写过一篇使用jacob对word插入图片的博客.点击率蛮高8800多次,当然多亏了百度搜索引擎的帮忙

  4. oracle 使从表中随机取出一行记录数据

    四种解决方案:测试数据90万条方案一:使用dbms_random.random 对数据排序,然后取出第一条,不过这种效率太低,用时3-4秒.SELECT *FROM (SELECT * FROM TE ...

  5. vue3中使用vue-quill富文本编辑器 重写图片上传功能

    最近开发的一个vue3+element-plus的项目,需要用到富文本编辑器,最终选择了VueQuill这一款轻便型的富文本编辑器. 说说遇到的问题:富文本编辑器的图片上传,默认是直接以base64图 ...

  6. 关系型数据库和非关系型数据库的区别与联系

    数据库 一.概念 数据库是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与应用程序彼此独立的数据集合. 数据库管理系统是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称 ...

  7. java异常类中属于非检测异常的是_下列java语言的常用异常类中,属于检测异常的是()_学小易找答案...

    [单选题]在Word 2010的编辑状态,对当前文档中的文字进行"字数统计"操作,应当使用的菜单是( ) [单选题]客运员领带统一,领带夹夹在衬衣的( )钮扣之间. [单选题]文件 ...

  8. java 接口重载_java,_java 接口中如何声明类似于重载的方法?,java - phpStudy

    java 接口中如何声明类似于重载的方法? 我们的作业要写一个web宠物医院管理系统,因为医生.客户等都包含浏览.添加.删除操作,所以对于service层,我希望有个统一的接口以供servlet中的类 ...

  9. python中气泡图文字标签_Excel中制作气泡图及为气泡图的系列数据点添加文本数据标签...

    Excel中制作气泡图及为气泡图的系列数据点添加文本数据标签 时间:2014-08-01   作者:snow   来源:互联网 Excel中的散点图可以显示两组数据之间的关系,而气泡图则可以显示三组数 ...

最新文章

  1. 认清自己,愉快度过每一天
  2. 在.net中使用GDI+来提高gif图片的保存画质
  3. 提高PHP编程效率的53个要点(转)
  4. golang 代码安全审计
  5. 找出数组中两个只出现一次的数字
  6. python pandas 读取excel 去重某一列_Python中Pandas读取修改excel操作攻略(代码示例)...
  7. Maven——常用命令详解
  8. url的特殊字符编码 encodeURI编码
  9. 使用jquery对特殊字符进行转义,防止js注入
  10. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]
  11. “宇宙最强”GPU —— NVIDIA Tesla V100 面向开发者开放试用!
  12. surfer 8 scripter 学习笔记(9)surfer与VB结合的VB源代码
  13. VSS 2005,项目解决方案重新签入管理的方法
  14. 如何检查电脑是否已经安装Flash Player
  15. Excel 函数公式大全
  16. 如何使用CH340G模块给51单片机下载程序
  17. 利用npn开关电路,将stm32 IO口输出的0-3.3v的pwm波转换为0-5v的pwm波
  18. 数据结构---线性表
  19. 阿里、京东、字节跳动春招,Java岗offer不好拿?一文带你搞定
  20. 报错ValueError: operands could not be broadcast together with shapes (448,448) with (224,224)

热门文章

  1. UVA1354天平难题 枚举二叉树
  2. PyTorch-数据准备
  3. 数据挖掘竞赛-轴承故障检测训练赛
  4. 词性标注与命名实体识别
  5. HDU4577(2013年ACM杭州赛区邀请赛B题)
  6. 使用PowerDbg自动化Windbg调试过程
  7. 算法面试|论如何4个月高效刷满 500 题并形成长期记忆
  8. 上班后咋防控?分享一份指南
  9. JAVA多线程之扩展ThreadPoolExecutor
  10. 曹大,欧神开新公众号了