JDBC之 大数据内容的传输
JDBC之 大数据内容的传输
什么是大数据内容?
在数据库中,有一条一条的记录,记录中很多字段都是几个字符就够的,假如现在要把一部小说存入数据库,这本小说当然不是几个字符组成,而是由几万字组成,这本小说的数据我们就可以说是大数据,生活中当然有各种各样的大数据:电影,音乐,图片等等。。。
大字符数据内容操作
大字符内容:通常是指很长的字符类型的文件,例如小说,故事等等,内容有字符组成。
下面说明一下MySQL与Oracle中的大数据类型
| 数据种类 | 数据大小 | MySQL | Oracle |
| 字符 | 小 | char,varchar | varchar2 |
| 大 | text/longtext | clob | |
| 字节 | 大 | bit,blob,longblob | blob |
1.把大字符数据存进数据库(把一个文本的数据存进MySQL中的text类型字段)
@Test
public void writeInDB() throws Exception {
//获取连接
connection = sqlUtil.getconnection(); //获取对象
PreparedStatement preparedStatement =
connection.prepareStatement("insert into book values(?)"); //准备一个Reader用于读取本地文件
Reader reader = new FileReader(new File("e:/test.txt")); //设置大数据参数
preparedStatement.setClob(1, reader); //执行SQL语句
preparedStatement.executeUpdate(); //关闭资源
reader.close();
sqlUtil.close(preparedStatement, connection);
}
2.从数据库把大字符文件读入到本地
@Test
public void readFromDB() throws Exception
{
//获取连接
connection = sqlUtil.getconnection(); //创建对象
PreparedStatement preparedStatement =
connection.prepareStatement("SELECT content FROM book"); //设置参数
//preparedStatement.setObject(1, "book"); //获得结果
ResultSet res = preparedStatement.executeQuery(); //以String的形式获得大字符内容
while(res.next())
{
String content = res.getString("content");
System.out.println(content);
} //关闭资源
sqlUtil.close(preparedStatement, connection);
}
获得结果后还有第二种方法:
@Test
public void readFromDB() throws Exception
{
//获取连接
connection = sqlUtil.getconnection(); //创建对象
PreparedStatement preparedStatement =
connection.prepareStatement("SELECT content FROM book"); //设置参数
//preparedStatement.setObject(1, "book"); //获得结果
ResultSet res = preparedStatement.executeQuery(); FileWriter fileWriter = new FileWriter(new File("d:/11021.txt"));
//利用Clob对象
if(res.next())
{
Clob clob = res.getClob("content");
Reader reader = clob.getCharacterStream(); //然后把Reader写入到本地文件中
char[] cr = new char[1024];
int len = 0;
while((len = reader.read(cr))!=-1)
{
fileWriter.write(cr, 0, len);
}
reader.close();
} //关闭资源
fileWriter.close();
sqlUtil.close(preparedStatement, connection);
}
以上就是对大字符文件的读入与写出~下面我们示范来对大字节文件的操作~
4.把大字节文件写入数据库
@Test
public void writeInDB() throws Exception {
//获取连接
connection = sqlUtil.getconnection(); //获取对象
PreparedStatement preparedStatement =
connection.prepareStatement("insert into book values(?,?)"); //准备一个InputStream用于读取本地文件
InputStream in = new FileInputStream(new File("f:/computer.jpg")); //设置大数据参数
preparedStatement.setObject(1, 1);
preparedStatement.setBlob(2, in);
//也可以使用这个
//preparedStatement.setBinaryStream(2, in); //执行SQL语句
preparedStatement.executeUpdate(); //关闭资源
in.close();
sqlUtil.close(preparedStatement, connection);
}
5.从数据库把大字节文件读取到本地
@Test
public void readFromDB() throws Exception
{
//获取连接
connection = sqlUtil.getconnection(); //创建对象
PreparedStatement preparedStatement =
connection.prepareStatement("SELECT content FROM book where id=?"); //设置参数
preparedStatement.setInt(1, 1); //获得结果
ResultSet res = preparedStatement.executeQuery(); FileOutputStream out = new FileOutputStream(new File("d:/999.jpg"));
//利用Blob对象
if(res.next())
{
//Blob blob = res.getBlob("content");
//InputStream in = blob.getBinaryStream();//这样也行 InputStream in = res.getBinaryStream("content");
//然后把Reader写入到本地文件中
byte[] buf = new byte[1024];
int len = 0;
while((len = in.read(buf))!=-1)
{
out.write(buf, 0, len);
}
in.close();
out.close();
}
//关闭资源
sqlUtil.close(preparedStatement, connection);
}
JDBC之 大数据内容的传输的更多相关文章
- C# 之 提高WebService性能大数据量网络传输处理
1.直接返回DataSet对象 特点:通常组件化的处理机制,不加任何修饰及处理: 优点:代码精减.易于处理,小数据量处理较快: 缺点:大数据量的传递处理慢,消耗网络资源: 建议:当应用系统在内网.专网 ...
- WebService - 怎样提高WebService性能 大数据量网络传输处理
直接返回DataSet对象 返回DataSet对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用 ...
- 使用tar+pigz+ssh实现大数据的高效传输
以前我们跨主机拷贝大数据的时候,比如要拷贝超过100GB的mysql原始数据,我们通常的做法如下: 在源端打包压缩为tar.gz文件 采用scp或者rsync等方式拷贝到目标主机 在目标主机解压文件 ...
- JDBC处理大数据
1.处理大文本 package com.demo; import java.io.File; import java.io.FileNotFoundException; import java.io. ...
- (十六)JDBC 处理大数据
目录 前言: 基本概念 对于Mysql的Text类型 流地址的写法 blob类型数据 备注 前言: 在实际开发中,程序需要把 大文本或二进制 数据保存到数据库中: 实际上,我们并不存储大的数据到数据库 ...
- c# 模拟表单提交,post form 上传文件、大数据内容
表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...
- WebService下实现大数据量的传输
设置RemotingFormat = SerializationFormat.Binary;再序列化,通过WebService传输,客户端接收,再反序列化,确实效果大大的优于直接传送DataSet,不 ...
- JDBC 学习笔记(二)—— 大数据+存储过程+批处理+事务管理
本文目录: 1.使用JDBC处理大数据 2.使用JDBC处理大文本 3.使用JDBC处理二进制数据 4.Oracle中大数据处理 5 ...
- BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
将一张图片存储在mysql中,并读取出来(BLOB数据:插入BLOB类型的数据必须使用PreparedStatement,因为插入BLOB类型的数据无法使用字符串拼写): -------------- ...
随机推荐
- ngx_lua_API 指令详解(三)怎样理解 cosocket指令
参考:https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx_lua/whats_cosocket.html 春哥演 ...
- jenkins设置CSRF 协议(CRUMB值设置)
在关闭“”调用出现Error 403 No valid crumb was included in the request 第一种解决方式是 关闭 csrf,如上图,去掉勾就可以,但是并不推荐. 第二 ...
- chrome 隐藏技能之 base64 图片转换
有时候我们要转换图片为base64,或者将base64转回图片,可能都需要找一些在线工具或者软件类型的工具才行.当然 chrome 也算是软件,但是好在做前端的都有 chrome.好了,来看下简单的例 ...
- java Runnable、Callable、FutureTask 和线程池
一:Runnable.Callable.FutureTask简介 (1)Runnable:其中的run()方法没有返回值. ①.Runnable对象可以直接扔给Thread创建线程实例,并且创建的线程 ...
- 训练赛第二场E题 Cottage Village
题目大意:在一条X轴上,有若干个正方形,并且保证这些正方形的中心都在X轴上,然后输入n个正方形的中心的X坐标,和正方形的边长,现在要再插入一个正方形,要求是,新插入的正方形至少要有一条边与原来的正方形 ...
- Linux dd命令中dsync与fdatasync的区别【转】
在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及到两个参数:dsync与fdatasync,本文介绍一下其区别. dd if=/dev/zero of=/tmp/1Gbytes b ...
- elasticsearch如何使用?
ES和关系型数据库的数据对比 1.创建索引库PUT/POST都可以,索引库名称必须全部小写,不能以下划线开头,也不能包含逗号curl -XPUT 'http://192.168.136.131:920 ...
- java 遍历指定目录下的文件夹并查找包含指定关键字的文件
输入指定关键字,在制定目录中查找包含关键字的文件,返回包含指定关键字的文件路径. package net.xsoftlab.baike; import java.io.File; import jav ...
- jenkins的svn路径中文问题
今天弄Jenkins,我们的SVN代码路径是中文的,他娘的坑死我了,很没面子弄了俩点,网上方案试了好多,说装插件,修改Tomcat server.xml,基本没用,后来看到一个帖子写的方案蛮实用的,分 ...
- 开启@EnableRedisHttpSession
sessionId=569662ce-c6d5-42a9-a94b-c9df826df716 1800秒后失效 sessionId=23913542-9b5f-4699-8a87-1023b57f5f ...