javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
一、基本概念
大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像、声音、二进制文等。
在实际开发中,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的。
对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,Text和blob分别又分为:
TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
二、搭建测试环境
2.1、搭建的测试项目架构
如下:
2.2、编写db.properties配置文件
1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/jdbcStudy
3 username=root
4 password=XDP
2.3、编写JdbcUtils工具类
1 package me.gacl.utils;2 3 import java.io.InputStream;4 import java.sql.Connection;5 import java.sql.DriverManager;6 import java.sql.ResultSet;7 import java.sql.SQLException;8 import java.sql.Statement;9 import java.util.Properties;
10
11 public class JdbcUtils {
12
13 private static String driver = null;
14 private static String url = null;
15 private static String username = null;
16 private static String password = null;
17
18 static{
19 try{
20 //读取db.properties文件中的数据库连接信息
21 InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
22 Properties prop = new Properties();
23 prop.load(in);
24
25 //获取数据库连接驱动
26 driver = prop.getProperty("driver");
27 //获取数据库连接URL地址
28 url = prop.getProperty("url");
29 //获取数据库连接用户名
30 username = prop.getProperty("username");
31 //获取数据库连接密码
32 password = prop.getProperty("password");
33
34 //加载数据库驱动
35 Class.forName(driver);
36
37 }catch (Exception e) {
38 throw new ExceptionInInitializerError(e);
39 }
40 }
41
42 /**
43 * @Method: getConnection
44 * @Description: 获取数据库连接对象
45 * @Anthor:孤傲苍狼
46 *
47 * @return Connection数据库连接对象
48 * @throws SQLException
49 */
50 public static Connection getConnection() throws SQLException{
51 return DriverManager.getConnection(url, username,password);
52 }
53
54 /**
55 * @Method: release
56 * @Description: 释放资源,
57 * 要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
58 * @Anthor:孤傲苍狼
59 *
60 * @param conn
61 * @param st
62 * @param rs
63 */
64 public static void release(Connection conn,Statement st,ResultSet rs){
65 if(rs!=null){
66 try{
67 //关闭存储查询结果的ResultSet对象
68 rs.close();
69 }catch (Exception e) {
70 e.printStackTrace();
71 }
72 rs = null;
73 }
74 if(st!=null){
75 try{
76 //关闭负责执行SQL命令的Statement对象
77 st.close();
78 }catch (Exception e) {
79 e.printStackTrace();
80 }
81 }
82
83 if(conn!=null){
84 try{
85 //关闭Connection数据库连接对象
86 conn.close();
87 }catch (Exception e) {
88 e.printStackTrace();
89 }
90 }
91 }
92 }
三、使用JDBC处理MySQL的大文本
对于MySQL中的Text类型,可调用如下方法设置
1 PreparedStatement.setCharacterStream(index, reader, length);//注意length长度须设置,并且设置为int型
对MySQL中的Text类型,可调用如下方法获取
1 reader = resultSet. getCharacterStream(String columnLabel);2 string s = resultSet.getString(String columnLabel);
3.1、 测试范例
1、编写SQL测试脚本
1 create database jdbcstudy;
2 use jdbcstudy;
3 create table testclob
4 (
5 id int primary key auto_increment,
6 resume text
7 );
2、编写测试代码如下:
1 package me.gacl.demo;2 3 import java.io.File;4 import java.io.FileReader;5 import java.io.FileWriter;6 import java.io.Reader;7 import java.sql.Connection;8 import java.sql.PreparedStatement;9 import java.sql.ResultSet;10 import me.gacl.utils.JdbcUtils;11 import org.junit.Test;12 13 /**14 * @ClassName: JdbcOperaClob15 * @Description: 使用JDBC操作MySQL的大文本16 * @author: 孤傲苍狼17 * @date: 2014-9-19 下午10:10:0418 *19 */ 20 public class JdbcOperaClob {21 22 /**23 * @Method: add24 * @Description:向数据库中插入大文本数据25 * @Anthor:孤傲苍狼26 *27 */ 28 @Test29 public void add(){30 Connection conn = null;31 PreparedStatement st = null;32 ResultSet rs = null;33 Reader reader = null;34 try{35 conn = JdbcUtils.getConnection();36 String sql = "insert into testclob(resume) values(?)";37 st = conn.prepareStatement(sql);38 //这种方式获取的路径,其中的空格会被使用“%20”代替39 String path = JdbcOperaClob.class.getClassLoader().getResource("data.txt").getPath();40 //将“%20”替换回空格41 path = path.replaceAll("%20", " ");42 File file = new File(path);43 reader = new FileReader(file);44 st.setCharacterStream(1, reader,(int) file.length());45 int num = st.executeUpdate();46 if(num>0){47 System.out.println("插入成功!!");48 }49 //关闭流50 reader.close();51 }catch (Exception e) {52 e.printStackTrace();53 }finally{54 JdbcUtils.release(conn, st, rs);55 }56 }57 58 /**59 * @Method: read60 * @Description: 读取数据库中的大文本数据61 * @Anthor:孤傲苍狼62 *63 */ 64 @Test65 public void read(){66 Connection conn = null;67 PreparedStatement st = null;68 ResultSet rs = null;69 try{70 conn = JdbcUtils.getConnection();71 String sql = "select resume from testclob where id=2";72 st = conn.prepareStatement(sql);73 rs = st.executeQuery();74 75 String contentStr ="";76 String content = "";77 if(rs.next()){78 //使用resultSet.getString("字段名")获取大文本数据的内容79 content = rs.getString("resume");80 //使用resultSet.getCharacterStream("字段名")获取大文本数据的内容81 Reader reader = rs.getCharacterStream("resume");82 char buffer[] = new char[1024];83 int len = 0;84 FileWriter out = new FileWriter("D:\\1.txt");85 while((len=reader.read(buffer))>0){86 contentStr += new String(buffer);87 out.write(buffer, 0, len);88 }89 out.close();90 reader.close();91 }92 System.out.println(content);93 System.out.println("-----------------------------------------------");94 System.out.println(contentStr);95 }catch (Exception e) {96 e.printStackTrace();97 }finally{98 JdbcUtils.release(conn, st, rs);99 }
100 }
101 }
四、使用JDBC处理MySQL的二进制数据
对于MySQL中的BLOB类型,可调用如下方法设置:
1 PreparedStatement. setBinaryStream(i, inputStream, length);
对MySQL中的BLOB类型,可调用如下方法获取:
1 InputStream in = resultSet.getBinaryStream(String columnLabel);
2 InputStream in = resultSet.getBlob(String columnLabel).getBinaryStream();
4.1、 测试范例
1、编写SQL测试脚本
1 create table testblob
2 (
3 id int primary key auto_increment,
4 image longblob
5 );
2、编写测试代码如下:
1 package me.gacl.demo;2 3 import java.io.File;4 import java.io.FileInputStream;5 import java.io.FileOutputStream;6 import java.io.InputStream;7 import java.sql.Connection;8 import java.sql.PreparedStatement;9 import java.sql.ResultSet;
10 import me.gacl.utils.JdbcUtils;
11 import org.junit.Test;
12
13 /**
14 * @ClassName: JdbcOperaClob
15 * @Description: 使用JDBC操作MySQL的二进制数据(例如图像、声音、二进制文)
16 * @author: 孤傲苍狼
17 * @date: 2014-9-19 下午10:10:04
18 *
19 */
20 public class JdbcOperaBlob {
21
22 /**
23 * @Method: add
24 * @Description:向数据库中插入二进制数据
25 * @Anthor:孤傲苍狼
26 *
27 */
28 @Test
29 public void add(){
30 Connection conn = null;
31 PreparedStatement st = null;
32 ResultSet rs = null;
33 try{
34 conn = JdbcUtils.getConnection();
35 String sql = "insert into testblob(image) values(?)";
36 st = conn.prepareStatement(sql);
37 //这种方式获取的路径,其中的空格会被使用“%20”代替
38 String path = JdbcOperaBlob.class.getClassLoader().getResource("01.jpg").getPath();
39 //将“%20”替换会空格
40 path = path.replaceAll("%20", " ");
41 File file = new File(path);
42 FileInputStream fis = new FileInputStream(file);//生成的流
43 st.setBinaryStream(1, fis,(int) file.length());
44 int num = st.executeUpdate();
45 if(num>0){
46 System.out.println("插入成功!!");
47 }
48 fis.close();
49 }catch (Exception e) {
50 e.printStackTrace();
51 }finally{
52 JdbcUtils.release(conn, st, rs);
53 }
54 }
55
56 /**
57 * @Method: read
58 * @Description: 读取数据库中的二进制数据
59 * @Anthor:孤傲苍狼
60 *
61 */
62 @Test
63 public void read() {
64 Connection conn = null;
65 PreparedStatement st = null;
66 ResultSet rs = null;
67 try {
68 conn = JdbcUtils.getConnection();
69 String sql = "select image from testblob where id=?";
70 st = conn.prepareStatement(sql);
71 st.setInt(1, 1);
72 rs = st.executeQuery();
73 if (rs.next()) {
74 //InputStream in = rs.getBlob("image").getBinaryStream();//这种方法也可以
75 InputStream in = rs.getBinaryStream("image");
76 int len = 0;
77 byte buffer[] = new byte[1024];
78
79 FileOutputStream out = new FileOutputStream("D:\\1.jpg");
80 while ((len = in.read(buffer)) > 0) {
81 out.write(buffer, 0, len);
82 }
83 in.close();
84 out.close();
85 }
86 } catch (Exception e) {
87 e.printStackTrace();
88 } finally {
89 JdbcUtils.release(conn, st, rs);
90 }
91 }
92 }
关于使用JDBC处理MySQL大数据的内容就总结这么多!
http://www.cnblogs.com/xdp-gacl/p/3982581.html
javaweb学习总结(三十四)——使用JDBC处理MySQL大数据相关推荐
- JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- javaweb学习总结(三十六)——使用JDBC进行批处理
在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...
- Mysql学习总结(13)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- javaweb学习总结(三十九)——数据库连接池
javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...
- JavaScript学习(三十四)—事件委托
JavaScript学习(三十四)-事件委托 (一).什么是事件委托? 所谓的事件委托就是指将事件添加到祖先元素身上,依据事件冒泡的原理(就是指事件的执行顺序是从当前元素逐步扩展到祖先元素,直到扩展到 ...
- 使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- oracle 开启事务_javaSE第十四部分 JDBC(2)mysql事务和JDBC实现事务
一.事务的基本介绍 1. 概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败. 2. 操作: 1. 开启事务: start transaction; 2. 回滚 ...
- javaweb学习总结(三十二)——JDBC学习入门
一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
最新文章
- 1数字图像获取:1.3图像处理算法的形式
- 它们的定义app.config中间section节点和在执行中使用
- POJ1182--带权并查集
- python2.7使用TimeDelta中total_seconds()方法的问题
- jsp调用servlet_053 JSP+Servlet整合练习:拼饭后台管理系统框架文档
- 编码格式(UTF-8 与 ANSI)各种编码解码(encode、decode)
- java callable
- for XML path 转义
- 普天视PTS-3130C 模拟网络AHD监控 三维云台键盘 PELCO解析程序
- 基础笔记(三):网络协议之Tcp、Http
- 详解JavaScript函数式编程中的curry函数
- APS高级排产软件解析
- 两群羊和一只狼,两只狮子
- 【论文笔记】用数字孪生改变农业食品生产系统和供应链
- 华为电脑浏览器主页被劫持
- as3 同屏1000+动画,不掉帧。解决方案。
- 人工智能之经典逻辑推理
- appstore 屏幕快照_Windows 8屏幕快照之旅:您可能想知道的一切
- 虚拟机十步安装VMware_workstation
- 技术、产业、人才三管齐下,数字人民币渐行渐近 | 产业区块链发展周报
热门文章
- Qt Creator使用Git
- QT的QSortFilterProxyModel类的使用
- QT的QApplication类的使用
- mysql支持arm64架构吗_arm64(aarch64)下使用mysql
- html和css制作动漫岛,CSS动画
- 「JupyterNotebook」Jupyter快捷键个人笔记
- 44_pytorch数据增强,Resize,Flip,Rotate,Random Move Crop,Scale,Crop Part,Noise
- HDFS权限设置 \ HDFS涉及ACLs的命令
- CSS中background-position详述
- Python多继承mro示例