javaweb学习总结-如何使用JDBC处理MySQL大数据
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型,BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
一、基本概念
在实际开发中,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的。
对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,Text和blob分别又分为:
TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
二、搭建测试环境
2.1、搭建的测试项目架构
2.2、编写erties配置文件
driver=erurl=jdbc:mysql://localhost:3306/jdbcStudyusername=rootpassword=XDP
2.3、编写JdbcUtils工具类
package s;import tStream;import ection;import erManager;import ltSet;import xception;import ement;import erties;public class JdbcUtils { private static String driver = null; private static String url = null; private static String username = null; private static String password = null; static{ try{ //读取erties文件中的数据库连接信息 InputStream in = lassLoader()esourceAsStream("erties"); Properties prop = new Properties(); (in); //获取数据库连接驱动 driver = roperty("driver"); //获取数据库连接URL地址 url = roperty("url"); //获取数据库连接用户名 username = roperty("username"); //获取数据库连接密码 password = roperty("password"); //加载数据库驱动 ame(driver); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } /** * @Method: getConnection * @Description: 获取数据库连接对象 * @Anthor:孤傲苍狼 * * @return Connection数据库连接对象 * @throws SQLException */ public static Connection getConnection() throws SQLException{ return onnection(url, username,password); } /** * @Method: release * @Description: 释放资源, * 要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象 * @Anthor:孤傲苍狼 * * @param conn * @param st * @param rs */ public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try{ //关闭存储查询结果的ResultSet对象 e(); }catch (Exception e) { tStackTrace(); } rs = null; } if(st!=null){ try{ //关闭负责执行SQL命令的Statement对象 e(); }catch (Exception e) { tStackTrace(); } } if(conn!=null){ try{ //关闭Connection数据库连接对象 e(); }catch (Exception e) { tStackTrace(); } } }}
三、使用JDBC处理MySQL的大文本
对于MySQL中的Text类型,可调用如下方法设置
haracterStream(index, reader, length);//注意length长度须设置,并且设置为int型
对MySQL中的Text类型,可调用如下方法获取
reader = resultSet. getCharacterStream(String columnLabel);2 string s = tring(String columnLabel);
3.1、 测试范例
1、编写SQL测试脚本
create database jdbcstudy;use jdbcstudy;create table testclob( id int primary key auto_increment, resume text);
2、编写测试代码如下:
package ;import ;import Reader;import Writer;import er;import ection;import aredStatement;import ltSet;import Utils;import ;/*** @ClassName: JdbcOperaClob* @Description: 使用JDBC操作MySQL的大文本* @author: 孤傲苍狼* @date: 2014-9-19 下午10:10:04**/ public class JdbcOperaClob { /** * @Method: add * @Description:向数据库中插入大文本数据 * @Anthor:孤傲苍狼 * */ @Test public void add(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; Reader reader = null; try{ conn = onnection(); String sql = " into testclob(resume) values("; st = areStatement(sql); //这种方式获取的路径,其中的空格会被使用“”代替 String path = lassLoader()esource("")ath(); //将“”替换回空格 path = aceAll("", " "); File file = new File(path); reader = new FileReader(file); haracterStream(1, reader,(int) th()); int num = uteUpdate(); if(num>0){ tln("插入成功!!"); } //关闭流 e(); }catch (Exception e) { tStackTrace(); }finally{ ase(conn, st, rs); } } /** * @Method: read * @Description: 读取数据库中的.大文本数据 * @Anthor:孤傲苍狼 * */ @Test public void read(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = onnection(); String sql = "select resume from testclob where id=2"; st = areStatement(sql); rs = uteQuery(); String contentStr =""; String content = ""; if(()){ //使用tring("字段名")获取大文本数据的内容 content = tring("resume"); //使用haracterStream("字段名")获取大文本数据的内容 Reader reader = haracterStream("resume"); char buffer[] = new char[1024]; int len = 0; FileWriter out = new FileWriter("D:"); while((len=(buffer))>0){ contentStr += new String(buffer); e(buffer, 0, len); } e(); e(); } tln(content); tln("-----------------------------------------------"); tln(contentStr); }catch (Exception e) { tStackTrace(); }finally{ ase(conn, st, rs); } }}
四、使用JDBC处理MySQL的二进制数据
对于MySQL中的BLOB类型,可调用如下方法设置:
PreparedStatement. setBinaryStream(i, inputStream, length);
对MySQL中的BLOB类型,可调用如下方法获取:
InputStream in = inaryStream(String columnLabel);InputStream in = lob(String columnLabel)inaryStream();
4.1、 测试范例
1、编写SQL测试脚本
create table testblob( id int primary key auto_increment, image longblob );
2、编写测试代码如下:
package ;import ;import InputStream;import OutputStream;import tStream;import ection;import aredStatement;import ltSet;import Utils;import ;/*** @ClassName: JdbcOperaClob* @Description: 使用JDBC操作MySQL的二进制数据(例如图像、声音、二进制文)* @author: 孤傲苍狼* @date: 2014-9-19 下午10:10:04**/ public class JdbcOperaBlob { /** * @Method: add * @Description:向数据库中插入二进制数据 * @Anthor:孤傲苍狼 * */ @Test public void add(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = onnection(); String sql = " into testblob(image) values("; st = areStatement(sql); //这种方式获取的路径,其中的空格会被使用“”代替 String path = JdbcOperaBlob.class.getClassLoader().getResource("01.jpg")ath(); //将“”替换会空格 path = aceAll("", " "); File file = new File(path); FileInputStream fis = new FileInputStream(file);//生成的流 inaryStream(1, fis,(int) th()); int num = uteUpdate(); if(num>0){ tln("插入成功!!"); } e(); }catch (Exception e) { tStackTrace(); }finally{ ase(conn, st, rs); } } /** * @Method: read * @Description: 读取数据库中的二进制数据 * @Anthor:孤傲苍狼 * */ @Test public void read() { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { conn = onnection(); String sql = "select image from testblob where id="; st = areStatement(sql); nt(1, 1); rs = uteQuery(); if (()) { //InputStream in = lob("image")inaryStream();//这种方法也可以 InputStream in = inaryStream("image"); int len = 0; byte buffer[] = new byte[1024]; FileOutputStream out = new FileOutputStream("D:1.jpg"); while ((len = (buffer)) > 0) { e(buffer, 0, len); } e(); e(); } } catch (Exception e) { tStackTrace(); } finally { ase(conn, st, rs); } }}
-
2017年初中综合实践教学反思
开展语文综合实践活动,是让学生通过活动掌握某一类型的语文知识和技能,从而培养学生的创造性思维。下面是本站小编为大家搜集整理出来的有关于2017年初中综合实践教学反思,欢迎阅读!2017年初中综合实践教学反思【1】开展语文综合性学习是提高学生语文素养的重要手...
-
2017年初中音乐教学反思范文
学音乐课教学是小学基础课的一个重要组成部分,其目的是为了提高民族的音乐文化素质。下面是本站小编为大家搜集整理出来的有关于2017年初中音乐教学反思范文,欢迎阅读!2017年初中音乐教学反思范文【一】一个学期即将过去,回顾前一时期的音乐课教学,下面两个方面...
-
初中思想品德教学反思1500字
反思过去,许多感慨,酸甜苦辣一应俱全。思想品德课主要任务是,使学生学会做人、学会做事、学会合作、学会学习,全面提高认识社会、适应社会,分析问题、解决问题的能力。在初中阶段,思品教师要教育、启发、帮助学生树立正确的人生观、价值观。因此,要求教师必须具备较高...
-
初二生物教学反思范文
初二生物应该怎么教,大家一起反思一下吧!下面是本站小编为大家收集的关于初二生物教学反思范文,欢迎大家阅读!初二生物教学反思范文【1】本学期我担任八年级生物教学工作,从考试情况来看,成绩不算理想。认真回顾这半年的教学工作,做如下教学反思。在教学中,初中学习...