20160408javaweb之JDBC 大二进制和大文件存取
一、大文本存取:
我们有一本约10M的小说,现存入数据库:
代码如下:以junit测试的方式给出
package com.dzq.lob; import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.junit.Test; import com.dzq.util.JDBCUtils; public class TextDemo1 {
@Test
public void addText(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String sql="insert into textdemo values (null,?,?)";
try{
conn=JDBCUtils.getConn();
ps=conn.prepareStatement(sql);
ps.setString(1, "钢铁是怎样炼成的.txt");
File file=new File("1.txt");
ps.setCharacterStream(2, new FileReader(file),(int)file.length());
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.close(rs, ps, conn);
}
} @Test
public void findText(){ Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String sql="select * from textdemo where id=?";
try{
conn=JDBCUtils.getConn();
ps=conn.prepareStatement(sql);
ps.setInt(1, 5);
rs=ps.executeQuery();
while (rs.next()) {
String filename=rs.getString("name");
Reader reader=rs.getCharacterStream("content");
Writer writer=new FileWriter(filename); char []cs=new char[1024];
int i=0;
while ((i=reader.read(cs))!=-1) {
writer.write(cs,0,i);
}
reader.close();
writer.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.close(rs, ps, conn);
}
}
}
二、大二进制存取:
我们有一个mp3文件,现存入数据库
代码如下:
package com.dzq.lob; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.junit.Test; import com.dzq.util.JDBCUtils; public class BlobDemo1 {
@Test
public void addBlob(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String sql="insert into blobdemo values (null,?,?)";
try{
conn=JDBCUtils.getConn();
ps=conn.prepareStatement(sql);
ps.setString(1, "洛天依.mp3");
File file=new File("1.mp3");
ps.setBinaryStream(2, new FileInputStream(file),(int)file.length());
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.close(rs, ps, conn);
} }
@Test
public void findBlob(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String sql="select * from blobdemo";
try{
conn=JDBCUtils.getConn();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while (rs.next()) {
String filename=rs.getString("name");
InputStream in=rs.getBinaryStream("content");
OutputStream out=new FileOutputStream(filename); byte []bs=new byte[1024];
int i=0;
while ((i=in.read(bs))!=-1) {
out.write(bs,0,i);
}
in.close();
out.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.close(rs, ps, conn);
}
}
}
三、其中出现的问题见链接:
20160408javaweb之JDBC 大二进制和大文件存取的更多相关文章
- Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)
Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...
- 使用JDBC处理MySQL大文本和大数据
LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. ...
- JDBC读写MySQL的大字段数据
JDBC读写MySQL的大字段数据 不管你是新手还是老手,大字段数据的操作常常令你感到很头痛.因为大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式 来处理的.而非一般的字段 ...
- BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
将一张图片存储在mysql中,并读取出来(BLOB数据:插入BLOB类型的数据必须使用PreparedStatement,因为插入BLOB类型的数据无法使用字符串拼写): -------------- ...
- Atitit图像识别的常用特征大总结attilax大总结
Atitit图像识别的常用特征大总结attilax大总结 1.1. 常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 1 1.2. HOG特征:方向梯度直方图(Histogram of O ...
- .git文件过大!删除大文件
在我们日常使用Git的时候,一般比较小的项目,我们可能不会注意到.git 这个文件. 其实, .git文件主要用来记录每次提交的变动,当我们的项目越来越大的时候,我们发现 .git文件越来越大. 很大 ...
- Python使用heapq实现小顶堆(TopK大)、大顶堆(BtmK小)
Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) | 四号程序员 Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) 4 Replies 需1求:给出N长 ...
- 首席技术官应该考虑的网络安全问题 IT大咖说 - 大咖干货,不再错过
首席技术官应该考虑的网络安全问题 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/dakalive/detail/5523
- 算法分析(2)——大O和大Θ
当一个软件遇到了性能瓶颈时,首要的改进是软件功能重构,适当删除可能拖垮系统的业务需求.客户对“实时”相当感兴趣,然而又有几个使用者能够真正清楚什么地方应该是实时的?这一点同样体现在其它行业,生厂商想要 ...
随机推荐
- DataContractJsonSerializer类
DataContractJsonSerializer类 DataContractJsonSerializer类同样是提供JSON序列化的类.而且貌似有几个方法还和XML有点点关系. 注意用此类要引用S ...
- windows查看服务端口
开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是介绍两个最常用的jQuery插件. 分别用 ...
- Failed to load unit 'PATM' (VERR_SSM_FIELD_NOT_CONSECUTIVE)
今天打开虚拟机启动的时候报错:Failed to load unit 'PATM' (VERR_SSM_FIELD_NOT_CONSECUTIVE) 后来发现虚机处于休眠状态,所以在虚机上右键,然后清 ...
- 察看so文件的依赖关系
使用arm-linux-androideabi-readelf 察看依赖动态库 /android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebui ...
- 《Data-Intensive Text Processing with mapReduce》读书笔记之二:mapreduce编程、框架及运行
搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知 ...
- HDU3466-Proud Merchants(01背包变形)
需要排序的01背包. 这种题排序时只需要考虑两个怎么排,重载小于号就可以了. 需要注意的是,如果一个物品你想先放进背包里,那么你排序是要放到后面!01背包的放置顺序的倒着的! 看到别人的博客都只是比较 ...
- 问题-Delphi编译时提示缺少delphi自己的单元文件
问题现象:在编译工程是,提示缺少DELPHI自己的很多单元. 问题原因:这可能是因为手动误删除,或是第三方控件安装时误删除DELPHI自己的目录引起的(如果说错了,希望高人指点). 问题处理: 方法一 ...
- linux定时器用法
linux定时器 原文出自http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.html 今天看书看到了关于alarm的一些用法 ...
- python学习之元组
#coding:utf-8# __author__ = 'Administrator'#元组:不可变序列 #空元组mm=()print mm#只有一个值的元组mm=(1,)print mmx=1,2, ...