请点击上面 免费订阅本账号!
本公众号主要推送java技术、web(html/js/ui)技术、数据库技术、web项目开发经验、IT生活、IT热点,让有经验的人知识面更广、技术更扎实、工资更高,让0基础的人秒变大牛,让你的生活更积极,更有乐趣。点击上方的蓝字,这样您每天可以看到更多的java知识和资讯!完全是免费订阅,请放心关注。 一、基本概念
大数据也称之为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.Driver2 url=jdbc:mysql://localhost:3306/jdbcStudy3 username=root4 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 text7 );
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: JdbcOperaClob 15 * @Description: 使用JDBC操作MySQL的大文本 16 * @author: 孤傲苍狼 17 * @date: 2014-9-19 下午10:10:04 18 * 19 */ 20 public class JdbcOperaClob { 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 Reader reader = null; 34 try{ 35 conn = JdbcUtils.getConnection(); 36 String sql = "insert into testclob(resume) values(?)"; 37 st = conn.prepareStatement(sql); 38 //这种方式获取的路径,其中的空格会被使用“ ”代替 39 String path = JdbcOperaClob.class.getClassLoader().getResource("data.txt").getPath(); 40 //将“ ”替换回空格 41 path = path.replaceAll(" ", " "); 42 File file = new File(path); 43 reader = new FileReader(file); 44 st.setCharacterStream(1, reader,(int) file.length()); 45 int num = st.EⅩEcuteUpdate(); 46 if(num |