JDBC处理文本和二进制文件
JDBC支持文本(CLOB)和二进制(BLOB)文件的处理,比如要往数据库里存取文章或者图片。这都是用流的思想来解决的。
来两个Demo看看JDBC是怎么操作文本和二进制文件的。
CLOB:
package com.wxisme.jdbcclob; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; /**
* 数据库中对文本对象的操作。
* @author wxisme
*
*/ public class CLOBTest {
/**
* 标准时间对象转换成long
* @param date
* @return long
*/
public static long dateTolong(String date) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
long time = 0;
try {
time = format.parse(date).getTime();
} catch (ParseException e) {
e.printStackTrace();
} return time;
}
/**
* 向数据库中插入一条带有Clob文本对象字段的记录
*/
public void test1() {
Connection conn = null;
PreparedStatement ps = null; try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
try {
conn = DriverManager.getConnection(c, "root", "1234");
String sql = "insert into student (name,pswd,time,stime,myImg) values(?,?,?,?,?)";
ps = conn.prepareStatement(sql); java.sql.Date date = new java.sql.Date(dateTolong("2015-5-14 9:25:32"));
Timestamp stime = new Timestamp(dateTolong("2015-5-14 9:25:32"));
ps.setString(1, "张三");
ps.setString(2, "123456");
ps.setDate(3, date);
ps.setTimestamp(4, stime);
ps.setClob(5, new FileReader("e:" +File.separator + "a.txt"));
ps.executeUpdate(); } catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) { //从数据库中读取Clob文本对象并输出
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Reader r = null; try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
try {
conn = DriverManager.getConnection(c, "root", "1234");
String sql = "select myImg from student where id=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, 1); rs = ps.executeQuery(); while(rs.next()) {
Clob clob = rs.getClob("myImg");
r = clob.getCharacterStream();
int t = 0;
while((t=r.read()) != -1) {
System.out.println((char)t);
} } } catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
r.close();
} catch (IOException e) {
e.printStackTrace();
} try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} } }
BLOB:
package com.wxisme.jdbcblob; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 数据库操作二进制文件 Blob类的使用
* @author wxisme
*
*/
public class BLOBTest {
/**
* 向数据库中插入二进制
*/
public void test1() {
Connection conn = null;
PreparedStatement ps = null; try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
try {
conn = DriverManager.getConnection(c, "root", "1234");
String sql = "insert into student (img) values(?)";
ps = conn.prepareStatement(sql);
ps.setBlob(1, new FileInputStream("e:" + File.separator + "b.jpg")); ps.executeUpdate(); } catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) { //从数据库中读取二进制文件并恢复
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
InputStream r = null;
OutputStream os = null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
try {
conn = DriverManager.getConnection(c, "root", "1234");
String sql = "select img from student where id=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, 3);
rs = ps.executeQuery(); os = new FileOutputStream(new File("e:/e.jpg"));
while(rs.next()) {
Blob blob = rs.getBlob("img");
r = blob.getBinaryStream();
int t = 0;
while((t=r.read()) != -1) {
os.write(t);
} } } catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
r.close();
} catch (IOException e) {
e.printStackTrace();
} try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
JDBC处理文本和二进制文件的更多相关文章
- 利用JDBC处理mysql大数据--大文本和二进制文件等
转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...
- Java -- JDBC mysql读写大数据,文本 和 二进制文件
1. 往mysql中读写字符文本 public class Demo1 { /* 创建数据库 create database LOBTest; use LOBTest; create table te ...
- 商城项目整理(四)JDBC+富文本编辑器实现商品增加,样式设置,和修改
UEditor富文本编辑器:http://ueditor.baidu.com/website/ 相应页面展示: 商品添加: 商品修改: 前台商品展示: 商品表建表语句: create table TE ...
- open语句对文本和二进制文件的读写
文本文件的操作此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有Open,Close,Line Input,FreeFile,EOF等.先简述其功能然后结合代码示例进行说明.Open:顾名 ...
- Jdbc中大文本类型的处理
Oracle中大文本数据类型, Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库, Text 长文本类型 Blob 二 ...
- jdbc java数据库连接 11)中大文本类型的处理
1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库, Text ...
- 数据库存储txt文本和jpg图片
环境:MySql+SQLyog+j2se+jdbc 存储文本用longtext类型 存储图片用blob类型 1.首先建表 create table t_t (id int(16) NOT NULL A ...
- Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件
HTTP协议支持文本和二进制文件传输.最常见的html格式的页面即文本,图片.音乐等为二进制文件.我们要对这两类文件加以区分并分别处理. static char * BIN_SUFFIXES = &q ...
- JDBC(下)
1. 预编译sql处理(防止sql注入) -- 创建数据库 CREATE DATABASE jdbc_demo DEFAULT CHARACTER SET utf8;i -- 创建表 USE jdbc ...
随机推荐
- linux防火墙开关以及端口规则添加
1. 重启后生效的 开启: chkconfig iptables on 关闭: chkconfig iptables off 2. 及时生效 开启: service iptables start 关闭 ...
- 【大数据笔记】白话详解Zookeeper的一致性
下面内容主要摘抄于<<Hadoop实战>>,红色高亮部分是本人添加的白话注释. Zookeeper 是一种高性能.可扩展的服务. Zookeeper 的读写速度非常快,并且读的 ...
- find 命令一个命令多参数如何使用,????,perm
[root@ob2 mytmp]# find -mtime -7 -type f \( -name "*.html" -o -name "*.tar.gz" \ ...
- iOS边练边学--UINavigationController导航条的使用
一.使用UINavigationController的步骤以及代码 // 程序加载完成后执行的代码 - (BOOL)application:(UIApplication *)application d ...
- MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
工程需要加上各个路径: 库使用需要几个文件: 1.include 文件夹 c/c++ /常规/附加包含目录 Connector/c++ 的安装版里面的Include 文件夹.或者把 /driver以及 ...
- 最小顶点覆盖(Minimum Vertex Cover)与最大独立集(Maximum Independent Set)
问题描述:就是在图中找最小的点集,使得覆盖所有边. 和独立集等价:独立集问题:在图中找最大的点集,使得点集内的所有点互不相连. 引理:顶点覆盖集和独立集互补. 上面这个引理使得这两个问题可以相互规约, ...
- mac for appium环境安装
之前写过windows 安装appium环境步骤. 1. 需求的前置条件如下 (mac 自动git.ruby.brew命令): 2. java 环境 3. git 环境 4. ruby环境 5. b ...
- imx6 spi分析
/************************************************************************** *本文主要跟踪imx6 spi设备和驱动的注册过 ...
- PHP 初学
虚拟目录和虚拟主机的关系?虚拟主机可以设置多个,虚拟目录呢? 以为phpstorm和Intellij一样,结果不是!它直接将所有内容上传(部署)到服务器即可,不像Intellij那样还调用服务器?? ...
- CentOS系统安装后的基础优化
在运维工作中,我们发现Linux系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行. 下面我就为大家简单讲解几点关于Linux系统安装后的基础优化操作. 注意:本次优化都是基 ...