亚洲一级电影在线观看,九九精品无码专区免费,亚洲AV无码资源在线观看 ,欧美国产高清

javaweb學(xué)習(xí)總結(jié)-如何使用JDBC處理MySQL大數(shù)據(jù)

時(shí)間:2020-10-23 15:02:15 學(xué)習(xí)總結(jié) 我要投稿

javaweb學(xué)習(xí)總結(jié)-如何使用JDBC處理MySQL大數(shù)據(jù)

  BLOB (binary large object),二進(jìn)制大對象,是一個(gè)可以存儲(chǔ)二進(jìn)制文件的容器。在計(jì)算機(jī)中,BLOB常常是數(shù)據(jù)庫中用來存儲(chǔ)二進(jìn)制文件的字段類型,BLOB是一個(gè)大文件,典型的BLOB是一張圖片或一個(gè)聲音文件,由于它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載或者存放到一個(gè)數(shù)據(jù)庫)。

javaweb學(xué)習(xí)總結(jié)-如何使用JDBC處理MySQL大數(shù)據(jù)

  一、基本概念

  在實(shí)際開發(fā)中,有時(shí)是需要用程序把大文本或二進(jìn)制數(shù)據(jù)直接保存到數(shù)據(jù)庫中進(jìn)行儲(chǔ)存的。

  對MySQL而言只有blob,而沒有clob,mysql存儲(chǔ)大文本采用的是Text,Text和blob分別又分為:

  TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

  TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB

  二、搭建測試環(huán)境

  2.1、搭建的測試項(xiàng)目架構(gòu)

  2.2、編寫db.properties配置文件

  driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcStudyusername=rootpassword=XDP

  2.3、編寫JdbcUtils工具類

  package me.gacl.utils;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;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{ //讀取db.properties文件中的數(shù)據(jù)庫連接信息 InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(in); //獲取數(shù)據(jù)庫連接驅(qū)動(dòng) driver = prop.getProperty("driver"); //獲取數(shù)據(jù)庫連接URL地址 url = prop.getProperty("url"); //獲取數(shù)據(jù)庫連接用戶名 username = prop.getProperty("username"); //獲取數(shù)據(jù)庫連接密碼 password = prop.getProperty("password"); //加載數(shù)據(jù)庫驅(qū)動(dòng) Class.forName(driver); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } /** * @Method: getConnection * @Description: 獲取數(shù)據(jù)庫連接對象 * @Anthor:孤傲蒼狼 * * @return Connection數(shù)據(jù)庫連接對象 * @throws SQLException */ public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, username,password); } /** * @Method: release * @Description: 釋放資源, * 要釋放的資源包括Connection數(shù)據(jù)庫連接對象,負(fù)責(zé)執(zhí)行SQL命令的Statement對象,存儲(chǔ)查詢結(jié)果的ResultSet對象 * @Anthor:孤傲蒼狼 * * @param conn * @param st * @param rs */ public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try{ //關(guān)閉存儲(chǔ)查詢結(jié)果的ResultSet對象 rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null; } if(st!=null){ try{ //關(guān)閉負(fù)責(zé)執(zhí)行SQL命令的Statement對象 st.close(); }catch (Exception e) { e.printStackTrace(); } } if(conn!=null){ try{ //關(guān)閉Connection數(shù)據(jù)庫連接對象 conn.close(); }catch (Exception e) { e.printStackTrace(); } } }}

  三、使用JDBC處理MySQL的大文本

  對于MySQL中的Text類型,可調(diào)用如下方法設(shè)置

  PreparedStatement.setCharacterStream(index, reader, length);//注意length長度須設(shè)置,并且設(shè)置為int型

  對MySQL中的Text類型,可調(diào)用如下方法獲取

  reader = resultSet. getCharacterStream(String columnLabel);2 string s = resultSet.getString(String columnLabel);

  3.1、 測試范例

  1、編寫SQL測試腳本

  create database jdbcstudy;use jdbcstudy;create table testclob( id int primary key auto_increment, resume text);

  2、編寫測試代碼如下:

  package me.gacl.demo;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.Reader;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import me.gacl.utils.JdbcUtils;import org.junit.Test;/*** @ClassName: JdbcOperaClob* @Description: 使用JDBC操作MySQL的大文本* @author: 孤傲蒼狼* @date: 2014-9-19 下午10:10:04**/ public class JdbcOperaClob { /** * @Method: add * @Description:向數(shù)據(jù)庫中插入大文本數(shù)據(jù) * @Anthor:孤傲蒼狼 * */ @Test public void add(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; Reader reader = null; try{ conn = JdbcUtils.getConnection(); String sql = " into testclob(resume) values("; st = conn.prepareStatement(sql); //這種方式獲取的路徑,其中的空格會(huì)被使用“”代替 String path = JdbcOperaClob.class.getClassLoader().getResource("data.txt").getPath(); //將“”替換回空格 path = path.replaceAll("", " "); File file = new File(path); reader = new FileReader(file); st.setCharacterStream(1, reader,(int) file.length()); int num = st.executeUpdate(); if(num>0){ System.out.println("插入成功!!"); } //關(guān)閉流 reader.close(); }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } /** * @Method: read * @Description: 讀取數(shù)據(jù)庫中的.大文本數(shù)據(jù) * @Anthor:孤傲蒼狼 * */ @Test public void read(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "select resume from testclob where id=2"; st = conn.prepareStatement(sql); rs = st.executeQuery(); String contentStr =""; String content = ""; if(rs.next()){ //使用resultSet.getString("字段名")獲取大文本數(shù)據(jù)的內(nèi)容 content = rs.getString("resume"); //使用resultSet.getCharacterStream("字段名")獲取大文本數(shù)據(jù)的內(nèi)容 Reader reader = rs.getCharacterStream("resume"); char buffer[] = new char[1024]; int len = 0; FileWriter out = new FileWriter("D:1.txt"); while((len=reader.read(buffer))>0){ contentStr += new String(buffer); out.write(buffer, 0, len); } out.close(); reader.close(); } System.out.println(content); System.out.println("-----------------------------------------------"); System.out.println(contentStr); }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } }}

  四、使用JDBC處理MySQL的二進(jìn)制數(shù)據(jù)

  對于MySQL中的BLOB類型,可調(diào)用如下方法設(shè)置:

  PreparedStatement. setBinaryStream(i, inputStream, length);

  對MySQL中的BLOB類型,可調(diào)用如下方法獲取:

  InputStream in = resultSet.getBinaryStream(String columnLabel);InputStream in = resultSet.getBlob(String columnLabel).getBinaryStream();

  4.1、 測試范例

  1、編寫SQL測試腳本

  create table testblob( id int primary key auto_increment, image longblob );

  2、編寫測試代碼如下:

  package me.gacl.demo;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import me.gacl.utils.JdbcUtils;import org.junit.Test;/*** @ClassName: JdbcOperaClob* @Description: 使用JDBC操作MySQL的二進(jìn)制數(shù)據(jù)(例如圖像、聲音、二進(jìn)制文)* @author: 孤傲蒼狼* @date: 2014-9-19 下午10:10:04**/ public class JdbcOperaBlob { /** * @Method: add * @Description:向數(shù)據(jù)庫中插入二進(jìn)制數(shù)據(jù) * @Anthor:孤傲蒼狼 * */ @Test public void add(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = " into testblob(image) values("; st = conn.prepareStatement(sql); //這種方式獲取的路徑,其中的空格會(huì)被使用“”代替 String path = JdbcOperaBlob.class.getClassLoader().getResource("01.jpg").getPath(); //將“”替換會(huì)空格 path = path.replaceAll("", " "); File file = new File(path); FileInputStream fis = new FileInputStream(file);//生成的流 st.setBinaryStream(1, fis,(int) file.length()); int num = st.executeUpdate(); if(num>0){ System.out.println("插入成功!!"); } fis.close(); }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } /** * @Method: read * @Description: 讀取數(shù)據(jù)庫中的二進(jìn)制數(shù)據(jù) * @Anthor:孤傲蒼狼 * */ @Test public void read() { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql = "select image from testblob where id="; st = conn.prepareStatement(sql); st.setInt(1, 1); rs = st.executeQuery(); if (rs.next()) { //InputStream in = rs.getBlob("image").getBinaryStream();//這種方法也可以 InputStream in = rs.getBinaryStream("image"); int len = 0; byte buffer[] = new byte[1024]; FileOutputStream out = new FileOutputStream("D:1.jpg"); while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close(); } } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtils.release(conn, st, rs); } }}

【javaweb學(xué)習(xí)總結(jié)-如何使用JDBC處理MySQL大數(shù)據(jù)】相關(guān)文章:

用Java如何處理XML數(shù)據(jù)08-10

JDBC對數(shù)據(jù)庫進(jìn)行操作的流程10-02

硬盤數(shù)據(jù)丟失如何處理呢07-19

如何在PHP中處理Protocol Buffers數(shù)據(jù)11-10

數(shù)據(jù)中心FcoE交換機(jī)如何使用08-15

如何使用 SQL 構(gòu)建動(dòng)態(tài)數(shù)據(jù)透視表介紹11-11

Linux數(shù)據(jù)庫的MySQL性能優(yōu)化技巧09-21

Linux數(shù)據(jù)庫MySQL內(nèi)部臨時(shí)表策略09-21

jboss配置mysql數(shù)據(jù)庫連接池09-27

PHP如何與mysql建立鏈接11-25

主站蜘蛛池模板: 国产av亚洲精品久久久久李知恩| 尤物在线精品视频| 国产成人亚洲综合色婷婷秒播| 少妇高清精品毛片在线视频| 欧美第一页在线| 久久超碰97中文字幕| 精品国产电影久久九九| 欧美黄网站免费观看| 国产★浪潮AV无码性色| 91区国产福利在线观看午夜 | 韩日美无码精品无码| 欧美牲交a欧美牲交aⅴ一| 国产成人片无码免费视频软件 | 亚洲熟妇无码av在线播放| 国99精品无码一区二区三区| 中文字幕人妻熟在线影院| 无码人妻丰满熟妇区五十路百度 | 国产成人av男人的天堂| 久9re热视频这里只有精品| 久久九九久精品国产| 91精品91| 永久免费精品性爱网站| 亚洲精品国产高清不卡在线| 久久 国产 综合| 久久香蕉国产线看观看亚洲片| 国产精品自在线拍国产| 国产精品18久久久久久麻辣| 又爆又大又粗又硬又黄的a片| 国产狂喷水潮免费网站www| 亚洲欧美日韩国产手机在线| 黑人巨大精品欧美一区二区免费| 97日日碰曰曰摸日日澡| 亚洲最大成人一区久久久| 午夜精品一区二区三区在线观看| 免费观看潮喷到高潮| 老太脱裤让老头玩ⅹxxxx| 思思re热免费精品视频66| 日日摸夜夜添最新无码| 中文字幕资源站| 九一九色国产| 久久av无码精品人妻系列果冻|