LOB (Large Objects)   分为:CLOBBLOB,即大文本和大二进制数据

CLOB:用于存储大文本

BLOB:用于存储二进制数据,例如图像、声音、二进制文件

在mysql中,只有BLOB,没有CLOB,mysql存储大文本用TEXT

TEXT  分为:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

BLOB 分为:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB

取值范围如下图:

下面来看具体的代码实现:

  1. package com.cream.ice.jdbc;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.Reader;
  8. import java.io.Writer;
  9. import java.sql.Connection;
  10. import java.sql.PreparedStatement;
  11. import java.sql.ResultSet;
  12. import java.sql.SQLException;
  13.  
  14. import org.junit.Test;
  15.  
  16. /**
  17. * 大文本数据操作
  18. *
  19. * 假设数据库中已存在表test:
  20. * create table test(
  21. * id int primary key,
  22. * content longtext
  23. * );
  24. *
  25. * @author ice
  26. *
  27. */
  28. public class ClobDemo {
  29.  
  30. Connection connection = null;
  31. PreparedStatement statement = null;
  32. ResultSet resultSet=null;
  33.  
  34. @Test
  35. public void add(){
  36. try {
  37. connection=JdbcUtils.getConnection();
  38. statement=connection.prepareStatement("insert into test (id,content) values (?,?)");
  39. statement.setInt(1, 1);
  40.  
  41. //大文本要使用流的形式。将d:/test.txt内容添加至该记录的content字段
  42. File file = new File("d:/test.txt");
  43. Reader reader = new FileReader(file);
  44. //不能使用long的参数,因为mysql根本支持不到那么大的数据,所以没有实现
  45. statement.setCharacterStream(2, reader, (int)file.length());
  46.  
  47. int i = statement.executeUpdate();
  48. if(i>0)
  49. System.out.println("插入成功");
  50.  
  51. } catch (SQLException e) {
  52. e.printStackTrace();
  53. } catch (FileNotFoundException e) {
  54. e.printStackTrace();
  55. } finally{
  56. JdbcUtils.releaseResources(null, statement, connection);
  57. }
  58. }
  59.  
  60. @Test
  61. public void read(){
  62. try {
  63. connection = JdbcUtils.getConnection();
  64. statement = connection.prepareStatement("select * from test where id=?");
  65. statement.setInt(1, 1);
  66.  
  67. //将读取内容保存到E盘上
  68. resultSet = statement.executeQuery();
  69. while(resultSet.next()){
  70. Reader reader = resultSet.getCharacterStream("content");
  71. Writer writer = new FileWriter("e:/test.txt");
  72. char buffer[] = new char[1024];
  73. int len = -1;
  74. while((len=reader.read(buffer))!=-1){
  75. writer.write(buffer, 0, len);
  76. }
  77. reader.close();
  78. writer.close();
  79. }
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. } finally{
  83. JdbcUtils.releaseResources(resultSet, statement, connection);
  84. }
  85. }
  86. }
  1. package com.cream.ice.jdbc;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.sql.Connection;
  8. import java.sql.PreparedStatement;
  9. import java.sql.ResultSet;
  10.  
  11. import org.junit.Test;
  12.  
  13. /**
  14. * 大二进制数据操作
  15. *
  16. * 假设数据库中已存在表test:
  17. * create table test(
  18. * id int primary key,
  19. * content longblob
  20. * );
  21. *
  22. * @author ice
  23. *
  24. */
  25. public class BlobDemo {
  26. Connection connection = null;
  27. PreparedStatement statement = null;
  28. ResultSet resultSet=null;
  29.  
  30. @Test
  31. public void add(){
  32. try {
  33. connection=JdbcUtils.getConnection();
  34. statement=connection.prepareStatement("insert into test (id,content) values (?,?)");
  35. statement.setInt(1, 1);
  36.  
  37. InputStream in = new FileInputStream("d:/test.jpg");
  38. statement.setBinaryStream(2, in, in.available());
  39.  
  40. int i = statement.executeUpdate();
  41. if(i>0)
  42. System.out.println("插入成功");
  43.  
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. } finally{
  47. JdbcUtils.releaseResources(null, statement, connection);
  48. }
  49. }
  50.  
  51. @Test
  52. public void read(){
  53. try {
  54. connection = JdbcUtils.getConnection();
  55. statement = connection.prepareStatement("select * from test where id=?");
  56. statement.setInt(1, 1);
  57.  
  58. //保存到E盘上
  59. resultSet = statement.executeQuery();
  60. while(resultSet.next()){
  61. InputStream in = resultSet.getBinaryStream("content");
  62. OutputStream out = new FileOutputStream("e:/test.jpg");
  63. byte b[] = new byte[1024];
  64. int len = -1;
  65. while((len=in.read(b))!=-1){
  66. out.write(b, 0, len);
  67. }
  68. out.close();
  69. in.close();
  70. }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. } finally{
  74. JdbcUtils.releaseResources(resultSet, statement, connection);
  75. }
  76. }
  77. }

这里使用了我上一篇jdbc基础中的JdbcUtils工具类,同时也使用了单元测试来测试两个成员方法,代码已亲测可运行。

csdn博文地址:jdbc基础 (三)  大文本、二进制数据处理

jdbc基础 (三) 大文本、二进制数据处理的更多相关文章

  1. 使用JDBC处理MySQL大文本和大数据

    LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. ...

  2. JDBC中级篇(MYSQL)——处理大文本(CLOB)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...

  3. JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  4. JavaWeb(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  5. 利用JDBC处理mysql大数据--大文本和二进制文件等

    转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...

  6. javaweb学习总结(三十四)——使用JDBC处理MySQL大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  7. javaweb(三十四)——使用JDBC处理MySQL大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  8. 三.使用JDBC处理MySql大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  9. 使用jdbc存储图片和大文本

    package cn.itcast.i_batch; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...

随机推荐

  1. 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点

    平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...

  2. Android中Spanner获取选中内容和选中位置,根据位置选择对象

    作为一名菜鸟,关于spanner获取选中的内容文字代码,网上后很多 但是根据给出的位置来自动选择对象,这个代码一直没找到 后来找人问了问,才知道就一句话的事,特意在这里记录下 array.xml  X ...

  3. 使用Azure Automation(自动化)定时关闭和启动虚拟机

    1. 概述 作为Windows Azure的用户,使用Azure的过程中,最担心的事情就是还没到月底,预设的费用就快消耗完了(下面两张账单图是我最讨厌看到的).但是仔细分析自己的费用列表,发现绝大部分 ...

  4. [转]SQLServer SQL执行效率和性能测试方法总结

    本文转自:http://www.zhixing123.cn/net/27495.html 对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提 ...

  5. 【Android Demo】通过WebService获取今日天气情况

    因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...

  6. OC基础数据类型-NSSet

    1.集合:集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址:不过NSArray是有序的集合,NSSet是无序的集合.集合是一种哈希表,运用散列算法,查找集合中的元素比数组 ...

  7. [转]Source Insight使用小技巧小结

    Source Insight是一款强大的代码查看工具,本身支持扩展性很好.下面我们就介绍2个扩展用例. 1.快速打开当前文件所在的目录,这个功能类似于eclipse的easyshell插件,就是能快速 ...

  8. Hill密码

    希尔密码(Hill Password)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明.每个字母当作26进制数字:A=, B=, C=... 一串字母当成n维向量,跟一个 ...

  9. WPF - MVVM - 如何将ComboBox的Selectchange事件binding到ViewModel

    转:http://www.cnblogs.com/mantian/p/3713524.html 将所有的事件,属性,都映射到ViewModel中.好处多多,以后开发尽量用这种模式. 解决方法: 使用S ...

  10. Android-MediaProvider数据库模式

    原文地址:http://www.otechu.me/zh/2011/10/schema-of-android-mediaprovider-database/ 摘要: Android MediaProv ...