標籤:
處理大資料對象
CLOB中可以儲存海量文字
BLOB中可以儲存海量位元據
如果程式中要想處理這樣的大對象操作,則必須使用PreparedStatement完成,所有的內容要通過IO流的方式從大文字欄位中儲存和讀取。
寫入大文本資料
漢字的編碼要改成gbk
//=================================================// File Name :Clob_demo//------------------------------------------------------------------------------// Author :Commonimport java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.*;import java.text.SimpleDateFormat;//主類//Function : Clob_demopublic class Clob_demo {//定義MySQL的資料庫驅動程式public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";//定義MySQL資料庫的串連地址public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";//MySQL資料庫的串連使用者名稱public static final String DBUSER = "root";//MySQL資料庫的串連密碼public static final String DBPASS = "123456";public static void main(String[] args) throws Exception{// TODO 自動產生的方法存根Connection conn = null;//資料庫連接PreparedStatement pstmt = null;//資料庫操作String name = "張三";String sql = "INSERT INTO userclob(name,note) VALUES (?,?) ";Class.forName(DBDRIVER);//載入驅動程式//串連MySQL資料庫時,要寫上串連的使用者名稱和密碼conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatement//聲明一個File對象,用於找到要操作的大文字檔File f = new File("/home/common/software/database/zhangsan.txt");InputStream input = null;//通過輸入資料流讀取內容input = new FileInputStream(f);//通過輸入資料流讀取檔案pstmt.setString(1, name); //設定第一個“?”的內容pstmt.setAsciiStream(2,input, (int)f.length()); //設定輸入資料流pstmt.executeUpdate();//執行資料庫更新操作pstmt.close();//操作關閉conn.close();//資料庫關閉}}
讀取大文字欄位
//=================================================// File Name :Clob_demo//------------------------------------------------------------------------------// Author :Commonimport java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.*;import java.text.SimpleDateFormat;import java.util.Scanner;//主類//Function : Clob_demopublic class Clob_demo {//定義MySQL的資料庫驅動程式public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";//定義MySQL資料庫的串連地址public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";//MySQL資料庫的串連使用者名稱public static final String DBUSER = "root";//MySQL資料庫的串連密碼public static final String DBPASS = "123456";public static void main(String[] args) throws Exception{// TODO 自動產生的方法存根Connection conn = null;//資料庫連接PreparedStatement pstmt = null;//資料庫操作ResultSet rs = null;//儲存結果集int id = 2;String sql = "SELECT name,note FROM userclob WHERE id=?";Class.forName(DBDRIVER);//載入驅動程式//串連MySQL資料庫時,要寫上串連的使用者名稱和密碼conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatementpstmt.setInt(1, id); //設定查詢的idrs = pstmt.executeQuery();//查詢while(rs.next()){String name = rs.getString(1);StringBuffer note = new StringBuffer();System.out.println("姓名:"+name);InputStream input = rs.getAsciiStream(2);//接收全部的文本資料Scanner scan = new Scanner(input);//接收資料scan.useDelimiter("\r\n");//將檔案換行作為分隔字元while(scan.hasNext()){note.append(scan.next()).append("\n");//不斷讀取內容}System.out.println("內容:"+note);input.close();}pstmt.close();//操作關閉conn.close();//資料庫關閉}}
//=================================================// File Name :Clob_demo//------------------------------------------------------------------------------// Author :Commonimport java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.*;import java.text.SimpleDateFormat;import java.util.Scanner;//主類//Function : Clob_demopublic class Clob_demo {//定義MySQL的資料庫驅動程式public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";//定義MySQL資料庫的串連地址public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";//MySQL資料庫的串連使用者名稱public static final String DBUSER = "root";//MySQL資料庫的串連密碼public static final String DBPASS = "123456";public static void main(String[] args) throws Exception{// TODO 自動產生的方法存根//Connection conn = null;//資料庫連接//PreparedStatement pstmt = null;//資料庫操作////String name = "張三";//String sql = "INSERT INTO userclob(name,note) VALUES (?,?) ";//Class.forName(DBDRIVER);//載入驅動程式////串連MySQL資料庫時,要寫上串連的使用者名稱和密碼//conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);//pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatement////聲明一個File對象,用於找到要操作的大文字檔//File f = new File("/home/common/software/database/無標題文檔");//InputStream input = null;//通過輸入資料流讀取內容//input = new FileInputStream(f);//通過輸入資料流讀取檔案//pstmt.setString(1, name); //設定第一個“?”的內容//pstmt.setAsciiStream(2,input, (int)f.length()); //設定輸入資料流//pstmt.executeUpdate();//執行資料庫更新操作//pstmt.close();//操作關閉//conn.close();//資料庫關閉//Connection conn = null;//資料庫連接//PreparedStatement pstmt = null;//資料庫操作//ResultSet rs = null;//儲存結果集////int id = 2;//String sql = "SELECT name,note FROM userclob WHERE id=?";//Class.forName(DBDRIVER);//載入驅動程式////串連MySQL資料庫時,要寫上串連的使用者名稱和密碼//conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);//pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatement//pstmt.setInt(1, id); //設定查詢的id//rs = pstmt.executeQuery();//查詢////while(rs.next()){//String name = rs.getString(1);//StringBuffer note = new StringBuffer();//System.out.println("姓名:"+name);//InputStream input = rs.getAsciiStream(2);//接收全部的文本資料//Scanner scan = new Scanner(input);//接收資料//scan.useDelimiter("\r\n");//將檔案換行作為分隔字元//while(scan.hasNext()){//note.append(scan.next()).append("\n");//不斷讀取內容//}//System.out.println("內容:"+note);//input.close();//}////pstmt.close();//操作關閉//conn.close();//資料庫關閉Connection conn = null;//資料庫連接PreparedStatement pstmt = null;//資料庫操作ResultSet rs = null;//儲存結果集int id = 2;String sql = "SELECT name,note FROM userclob WHERE id=?";Class.forName(DBDRIVER);//載入驅動程式//串連MySQL資料庫時,要寫上串連的使用者名稱和密碼conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatementpstmt.setInt(1, id); //設定查詢的idrs = pstmt.executeQuery();//查詢while(rs.next()){String name = rs.getString(1);//取出name列的內容Clob c = rs.getClob(2);//取出大文本資料String note = c.getSubString(1, (int)c.length());//CLOB開始的位置為1System.out.println("姓名:"+name);System.out.println("內容:"+note);c.truncate(100);System.out.println("部分的讀取內容:"+c.getSubString(1, (int)c.length()));}pstmt.close();//操作關閉conn.close();//資料庫關閉}}
處理BLOB資料
create table userblob(id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,photo LONGBLOB);
//=================================================// File Name :Blob_demo//------------------------------------------------------------------------------// Author :Commonimport java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.sql.*;import java.text.SimpleDateFormat;import java.util.Scanner;//主類//Function : Blob_demopublic class Blob_demo {//定義MySQL的資料庫驅動程式public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";//定義MySQL資料庫的串連地址public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";//MySQL資料庫的串連使用者名稱public static final String DBUSER = "root";//MySQL資料庫的串連密碼public static final String DBPASS = "123456";public static void main(String[] args) throws Exception{// TODO 自動產生的方法存根//Connection conn = null;//資料庫連接//PreparedStatement pstmt = null;//資料庫操作////String name = "趙六";//String sql = "INSERT INTO userblob(name,photo) VALUES (?,?) ";//Class.forName(DBDRIVER);//載入驅動程式////串連MySQL資料庫時,要寫上串連的使用者名稱和密碼//conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);//pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatement////聲明一個File對象,用於找到要操作的大文字檔//File f = new File("/home/common/software/database/photo.jpg");//InputStream input = null;//通過輸入資料流讀取內容//input = new FileInputStream(f);//通過輸入資料流讀取檔案//pstmt.setString(1, name); //設定第一個“?”的內容//pstmt.setBinaryStream(2,input, (int)f.length()); //設定輸入資料流//pstmt.executeUpdate();//執行資料庫更新操作//pstmt.close();//操作關閉//conn.close();//資料庫關閉Connection conn = null;//資料庫連接PreparedStatement pstmt = null;//資料庫操作ResultSet rs = null;//儲存結果集int id = 1;String sql = "SELECT name,photo FROM userblob WHERE id=?";Class.forName(DBDRIVER);//載入驅動程式//串連MySQL資料庫時,要寫上串連的使用者名稱和密碼conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);pstmt = conn.prepareStatement(sql);//執行個體化PreparedStatementpstmt.setInt(1, id);//設定查詢的idrs = pstmt.executeQuery();//查詢while(rs.next()){String name = rs.getString(1);StringBuffer note = new StringBuffer();System.out.println("姓名:"+name);InputStream input = rs.getBinaryStream(2);//接收全部的大文本資料FileOutputStream out = null;out = new FileOutputStream(new File("/home/common/software/database/photo_copy.jpg"));int temp = 0;while((temp = input.read()) != -1){//邊讀邊寫out.write(temp);}input.close();out.close();}pstmt.close();//操作關閉conn.close();//資料庫關閉}}
Java資料庫——處理大資料對象