Java資料庫——處理大資料對象

來源:互聯網
上載者:User

標籤:

處理大資料對象

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資料庫——處理大資料對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.