使用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
转载于:https://www.cnblogs.com/GtShare/p/7597654.html
使用JDBC处理MySQL大数据相关推荐
- javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- Mysql学习总结(13)——使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- mysql大数据量导入
mysql大数据量导入 mysql大数据量导入 数据生成 测试数据5000万 import java.io.*; import java.util.Random;public class Genera ...
- MySQL大数据量分页查询方法及其优化
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...
- JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- mysql大数据量分页的一些做法
随着公司业务的增长,数据库的数据也呈指数级增长,拿订单表为例,之前公司的订单表每天只有几千个,一个月下来不超过十万.而现在每天的订单大概就是2w+,目前订单表的数据已经达到了700w.这带来了各种各样 ...
- easyui分页查询为什么会有下拉框_6个针对MySQL大数据量分页查询优化的锦囊妙计...
作者:大神养成记转载来源:http://sina.lt/gauW 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M ...
- 使用JDBC处理Oracle大数据
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...
最新文章
- 难点电路详解之负反馈放大器电路(2)
- 九十六、双指针和滑动窗口算法模板
- python 阿狸的进阶之路(4)
- python入门神图
- KMP算法经典题目--实现 strStr()
- 织梦5.7生成HTML很慢,Dedecms 生成静态网页速度特别慢的问题
- Head First设计模式之命令模式
- 【LaTeX安装】如何在windows电脑上安装 texlive2021
- OLS和GWR模型部分参数解释
- win10系统dnf安装不上服务器失败,win10系统玩dnf图表系统组建失败怎么修复
- jy-10-SPRINGMYBATIS01——Spring-成恒
- Java方式实现上传微信素材
- Python实现1~100猜数字小游戏
- React云音悦WebApp
- 电压放大和电流放大区分
- Java将16进制字符串,转换成字符串
- [Python公开课]零基础玩转Python基础篇----第四节:Python的字符串
- 学术资源不定期分享-【费曼物理学讲义英文原版】
- Package OpenCV not found? Let’s Find It.
- 没学过量子力学,物理学也是一团糟,不过我觉得这个故事很有意思