`
coolxing
  • 浏览: 870137 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:95963
社区版块
存档分类
最新评论

使用JDBC处理文本数据或二进制数据

    博客分类:
  • JDBC
阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]


LOB(Large Object)分为CLOB和BLOB, CLOB表示文本数据, BLOB用于表示二进制数据.

MySql存储文本数据使用的是TEXT而不是CLOB, MySql中的TEXT和BLOB分别分为:

TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT, 占用的内存空间分别为256B, 64K, 16M, 64G.

TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB, 占用的内存空间同上.

如果LOB数据过大, 并不适合使用数据库处理, 因为处理这些数据需要长时间占用数据库的链接资源.


读取与存储TEXT数据:

/*
 * create table text_data(id int primary key auto_increment, resume text);
 */
public class TextData {
	@Test
	public void insertToDatabase() {
		Connection conn = null;
		PreparedStatement st = null;
		
		String sql = "insert into text_data(resume) values(?)";
		// 获得文本文件的绝对路径
		String path = TextData.class.getClassLoader().getResource("db.properties").getPath();
		File file = new File(path);
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			st.setCharacterStream(1, new FileReader(file), (int)file.length());
			st.executeUpdate();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}
	
	@Test
	public void readTextFromDatabase() {
		Connection conn = null;
		PreparedStatement st = null;
		ResultSet rs = null;
		Reader reader = null;
		FileWriter writer = null;
		
		String sql = "select resume from text_data where id=1";
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			if (rs.next()) {
				reader = rs.getCharacterStream("resume");
				writer = new FileWriter("d://db.properties");
				char[] chs = new char[1024];
				int len = 0;
				while((len = reader.read(chs)) != -1) {
					writer.write(chs, 0, len);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			FileUtils.fileClose(reader, writer);
			JdbcUtils.release(null, st, conn);
		}
	}
}

读取与存储二进制数据:

/*
 * create table blob_data(id int primary key auto_increment, resume blob);
 */
public class BlobData {
	@Test
	public void insertToDatabase() {
		Connection conn = null;
		PreparedStatement st = null;

		String sql = "insert into blob_data(resume) values(?)";
		// 获得文本文件的绝对路径
		String path = TextData.class.getClassLoader().getResource(
				"db.properties").getPath();
		File file = new File(path);
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			st.setBinaryStream(1, new FileInputStream(file), (int) file
					.length());
			st.executeUpdate();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}

	@Test
	public void readBlobFromDatabase() {
		Connection conn = null;
		PreparedStatement st = null;
		ResultSet rs = null;
		InputStream in = null;
		OutputStream out = null;

		String sql = "select resume from blob_data where id=1";
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			if (rs.next()) {
				in = rs.getBinaryStream("resume");
				out = new FileOutputStream("d://db.properties");
				byte[] buffer = new byte[1024];
				int len = 0;
				while((len = in.read(buffer)) != -1) {
					out.write(buffer, 0, len);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			FileUtils.streamClose(in, out);
			JdbcUtils.release(null, st, conn);
		}
	}
}
 
1
3
分享到:
评论

相关推荐

    javaweb学习总结——使用JDBC处理MySQL大数据

    本篇文章主要介绍了JDBC处理MySQL大数据,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的,非常具有实用价值,需要的朋友可以参考下。

    把任意数据库导出为其它数据库的insert(可执行程序+java代码)

    大文本和二进制字段被忽略。 当前支持oracle、sybase、mysql和ms sqlServer数据库。 你可以修改参数文件、增加新的jdbc驱动来增加新数据库种类的支持。 使用方法: 软件为免安装的绿色软件。系统必须已经安装1.4...

    Java核心技术II(第8版)

    1.3 读入和写出二进制数据 1.3.1 随机访问文件 1.4 ZIP文档 1.5 对象流与序列化 1.5.1 理解对象序列化的文件格式 1.5.2 修改缺省的序列化机制 1.5.3 序列化单例和类型安全的枚举 1.5.4 版本管理 1.5.5 为克隆使用...

    Java数据库迁移备份软件源代码.rar

    作者 : 杨浚用于把数据库里的数据导出为insert语句,用于数据备份或迁移到另一个数据库,支持oracle、sybase、mysql和ms sqlServer数据库,大文本和二进制字段被忽略,开发者可以修改参数文件、增加新的jdbc驱动来...

    Java数据库编程宝典2

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    Java数据库编程宝典4

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    Java数据库编程宝典1

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    Java数据库编程宝典3

    14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...

    JavaWeb实战开发

    6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据? ? ?7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)? ? ?8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与...

    sqoop工具_202006041735481.docx

    Apache Sqoop(SQL-to-Hadoop) 项目旨在协助 RDBMS 与 Hadoop 之间进行高效的大数据交流。 用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的...常见的有定界文本类型,Avro 二进制类型以及 Sequence Files 类型。

    modeshape-jdbc-local-4.0.0.Alpha2.zip

    snodge.zip,一个小的、可扩展的Java库,用于随机改变JSON文档。用于模糊测试。随机改变json、xml、html表单、文本和二进制数据用于模糊测试

    MySQL5 权威指南第3版中文版_part1

     18.5 处理二进制数据和特殊字符  18.6 出错处理  第19章 Visual Basic 6/VBA  19.1 基础知识和术语  19.2 Connector/ODBC选项  19.3 ADO程序设计与Visual Basic 6/VBA  19.4 与MySQL服务器建立连接  19.5 ...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    自己写的数据库装载工具,平时工作中用于装载大...mysql例子: 登陆本机数据库的root用户,裝载a.txt的文本数据到tmp_i表,不提交 java -jar xxx.jar -db mysql -i 127.0.0.1 -s gjjgj -u root -w root -f a.txt -t tmp_i

    Java数据库备份迁移程序的源代码

    Java完成的程序可以把数据库里的数据导出为其它数据库的insert语句,用于数据备份或迁移到另一个数据库,注意,在数据转换过程中,文本和二进制字段将被忽略,程序支持oracle、sybase、mysql和ms sqlServer数据库。...

    MySQL 5权威指南(第3版) 中文版 下载地址

     18.5 处理二进制数据和特殊字符  18.6 出错处理  第19章 Visual Basic 6/VBA  19.1 基础知识和术语  19.2 Connector/ODBC选项  19.3 ADO程序设计与Visual Basic 6/VBA  19.4 与MySQL服务器建立连接 ...

    Python Cookbook

    2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 ...

    JAVA_API1.6文档(中文)

    javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...

    Java语言基础下载

    二进制大对象BLOB 357 RowSet 新特性 359 JdbcRowSet 360 FilteredRowSet 361 内容总结 363 独立实践 364 第二十一章:XML基础 366 学习目标 366 XML的概念 367 定义XML文档 368 命名冲突 371 使用前缀解决命名冲突...

Global site tag (gtag.js) - Google Analytics