[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);
}
}
}
分享到:
相关推荐
本篇文章主要介绍了JDBC处理MySQL大数据,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的,非常具有实用价值,需要的朋友可以参考下。
大文本和二进制字段被忽略。 当前支持oracle、sybase、mysql和ms sqlServer数据库。 你可以修改参数文件、增加新的jdbc驱动来增加新数据库种类的支持。 使用方法: 软件为免安装的绿色软件。系统必须已经安装1.4...
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 为克隆使用...
作者 : 杨浚用于把数据库里的数据导出为insert语句,用于数据备份或迁移到另一个数据库,支持oracle、sybase、mysql和ms sqlServer数据库,大文本和二进制字段被忽略,开发者可以修改参数文件、增加新的jdbc驱动来...
14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...
14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...
14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...
14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动...
6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据? ? ?7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)? ? ?8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与...
Apache Sqoop(SQL-to-Hadoop) 项目旨在协助 RDBMS 与 Hadoop 之间进行高效的大数据交流。 用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的...常见的有定界文本类型,Avro 二进制类型以及 Sequence Files 类型。
snodge.zip,一个小的、可扩展的Java库,用于随机改变JSON文档。用于模糊测试。随机改变json、xml、html表单、文本和二进制数据用于模糊测试
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 ...
自己写的数据库装载工具,平时工作中用于装载大...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完成的程序可以把数据库里的数据导出为其它数据库的insert语句,用于数据备份或迁移到另一个数据库,注意,在数据转换过程中,文本和二进制字段将被忽略,程序支持oracle、sybase、mysql和ms sqlServer数据库。...
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服务器建立连接 ...
2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 ...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
二进制大对象BLOB 357 RowSet 新特性 359 JdbcRowSet 360 FilteredRowSet 361 内容总结 363 独立实践 364 第二十一章:XML基础 366 学习目标 366 XML的概念 367 定义XML文档 368 命名冲突 371 使用前缀解决命名冲突...