使用JDBC處理MySQL大文本和大資料

來源:互聯網
上載者:User

標籤:

        LOB,Large Objects,是一種用於儲存大對象的資料類型,一般LOB又分為BLOB與CLOB。BLOB通常用於儲存位元據,比片、音頻、視頻等。CLOB通常用於儲存大文本,比如小說。

        MySQL資料庫中沒有專門的CLOB資料類型,而如果要儲存大文本,MySQL採用的是TEXT類型。TEXT類型又有TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT之分。MySQL中的BLOB類型又可分為TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

使用JDBC處理大文本

        向MySQL中儲存大文本,可調用JDBC API中PreparedStatement的如下方法:

// 將指定參數設定為給定 Reader 對象

void setCharacterStream(int parameterIndex, Reader reader) throws SQLException

// 將給定參數設定為給定 Reader 對象,該對象具有給定字元數長度(int型)

 void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException

// 將指定參數設定為給定 Reader 對象,該對象具有給定字元數長度(long型)

void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException

        如果需要從MySQL資料庫中擷取大文本欄欄位值,則可以使用ResultSet的如下方法:

// 以 java.io.Reader 對象的形式擷取此 ResultSet 對象的當前行中指定列的值

Reader getCharacterStream(int columnIndex) throws SQLException Reader getCharacterStream(String columnLabel) throws SQLException

// 以 String 的形式擷取此 ResultSet 對象的當前行中指定列的值

String getString(int columnIndex) throws SQLException String getString(String columnLabel) throws SQLException

樣本:

        代碼:

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

/**  * 使用JDBC操作大文本

 *  * @author

 *  */

public class ClobTest {

    /**      * 使用JDBC向資料庫表中插入大文本資料    

    *      * @throws SQLException  

    */  

   public static void add() throws SQLException {    

     Connection conn = null;    

     PreparedStatement pstmt = null;    

     // 擷取資料庫會話對象     

    JdbcSession session = JdbcSessionFactory.getCurrentSession();     

    // 擷取資料庫連接     

    conn = session.getConnection();   

    // 建立SQL語句:向小說表中添加一條章節內容的記錄     

    String sql = "INSERT INTO novel(content) VALUES(?)";     

    // 建立PreparedStatement對象    

     pstmt = conn.prepareStatement(sql);    

     // 建立Reader對象    

     File file = new File(Thread.currentThread().getClass().getResource("/novel/1.txt").getPath());    

     Reader reader = null;   

      try {      

       reader = new FileReader(file);    

     } catch (FileNotFoundException e) {     

        e.printStackTrace();   

      }    

     // 設定參數      

       pstmt.setCharacterStream(1, reader, (int) file.length());     

    // 執行SQL語句     

        int count = pstmt.executeUpdate();    

     // 處理結果    

        if (count > 0)    

         System.out.println("添加成功");  

       else   

          System.out.println("添加失敗");   

      // 釋放資源    

     JdbcResourceManager.close(pstmt);    

     JdbcResourceManager.close(conn);   

      JdbcSessionFactory.closeSession();   

  }

    public static void read() throws SQLException {   

      Connection conn = null;   

      PreparedStatement pstmt = null;    

     ResultSet rs = null;    

     // 擷取資料庫會話對象    

     JdbcSession session = JdbcSessionFactory.getCurrentSession();    

     // 擷取資料庫連接    

     conn = session.getConnection();     

    // 建立SQL語句     

    String sql = "SELECT id, content FROM novel";    

     // 建立PreparedStatement對象   

      pstmt = conn.prepareStatement(sql);    

     // 執行SQL語句     

    rs = pstmt.executeQuery();    

     // 處理結果    

     while (rs.next()) {      

       // 讀取小說內容     

        Reader reader = rs.getCharacterStream("content");       

        int ch;     

        try {        

         while((ch = reader.read()) != -1){          

           System.out.print((char)ch);     

            }      

       } catch (IOException e) {        

         e.printStackTrace();       

      }   

      }     

    // 釋放資源      

      JdbcResourceManager.close(rs);   

      JdbcResourceManager.close(pstmt);

       JdbcResourceManager.close(conn);  

       JdbcSessionFactory.closeSession();  

   }

    public static void main(String[] args) {    

     try {     

        add();      

       read();    

     } catch (SQLException e) {     

        e.printStackTrace();   

      }   

  }

}

 

使用JDBC處理位元據     

         向MySQL中儲存位元據,可調用JDBC API中PreparedStatement的如下方法:

// 將指定參數設定為給定輸入資料流。

void setBinaryStream(int parameterIndex, InputStream x)

// 將指定參數設定為給定輸入資料流,該輸入資料流將具有給定位元組數(int型)。

void setBinaryStream(int parameterIndex, InputStream x, int length)

// 將指定參數設定為給定輸入資料流,該輸入資料流將具有指定位元組數(long型)。

void setBinaryStream(int parameterIndex, InputStream x, long length)

         如果需要從MySQL資料庫中擷取二進位欄欄位值,則可以使用ResultSet的如下方法:

// 以未解釋位元組的流的形式擷取此 ResultSet 對象的當前行中指定列的值。

InputStream getBinaryStream(int columnIndex)

// 以未解釋的 byte 流的形式擷取此 ResultSet 對象的當前行中指定列的值。

InputStream getBinaryStream(String columnLabel)

// 以 Java 程式設計語言中 Blob 對象的形式擷取此 ResultSet 對象的當前行中指定列的值。

Blob getBlob(int columnIndex)

// 以 Java 程式設計語言中 Blob 對象的形式擷取此 ResultSet 對象的當前行中指定列的值。

Blob getBlob(String columnLabel)

         擷取Blob對象後可以繼續調用getBinaryStream()方法擷取輸入資料流。

樣本:

代碼:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

/**  * 使用JDBC操作位元據

 *  * @author 

 *  */

public class BlobTest {

    /**      * 插入位元據到資料庫   

     *      * @throws Exception  

    */  

   public static void add() throws Exception {    

     Connection conn = null;     

    PreparedStatement pstmt = null;    

     // 擷取資料庫會話對象    

     JdbcSession session = JdbcSessionFactory.getCurrentSession();   

      // 擷取資料庫連接     

    conn = session.getConnection();    

     // 插入音樂資料的SQL語句     

    String sql = "INSERT INTO music(content) VALUES(?)";    

     pstmt = conn.prepareStatement(sql);    

     // 建立PreparedStatement對象    

     pstmt = conn.prepareStatement(sql);     

    // 建立Reader對象    

     File file = new File(Thread.currentThread().getClass().getResource("/music/08.Along_in_the_night.mp3").getPath());   

      InputStream fis = new FileInputStream(file);

     // 產生的流    

     pstmt.setBinaryStream(1, fis, file.length());    

     // 執行SQL語句     

    int count = pstmt.executeUpdate();     

    // 處理結果    

     if (count > 0)       

      System.out.println("添加成功");     

    else      

       System.out.println("添加失敗");    

     // 釋放資源   

      JdbcResourceManager.close(pstmt);     

    JdbcResourceManager.close(conn);     

    JdbcSessionFactory.closeSession();  

   }

    /**      * 從資料庫中讀位元據   

   *      * @throws Exception    

  */  

   public static void read() throws Exception {      

   Connection conn = null;     

    PreparedStatement pstmt = null;     

    ResultSet rs = null;    

     // 擷取資料庫會話對象     

    JdbcSession session = JdbcSessionFactory.getCurrentSession();    

     // 擷取資料庫連接     

    conn = session.getConnection();   

      // 建立SQL語句     

    String sql = "SELECT id, content FROM music WHERE id=?";     

    // 建立PreparedStatement對象    

     pstmt = conn.prepareStatement(sql);   

      pstmt.setInt(1, 1);   

      // 執行SQL語句     

    rs = pstmt.executeQuery();    

     // 處理結果   

      if (rs.next()) {     

        InputStream in = rs.getBinaryStream("content");

// 擷取欄欄位InputStream對象      

       // 緩衝數組     

        byte buf[] = new byte[1024];      

       int len;       

      // 輸出資料流,將讀取到的音樂資料儲存到D盤      

       OutputStream out = new FileOutputStream("D:\\1.mp3");      

       while ((len = in.read(buf)) != -1) {         

        out.write(buf, 0, len);     

        }   

          in.close();      

       out.close();       

  }      

   // 釋放資源     

    JdbcResourceManager.close(rs);    

     JdbcResourceManager.close(pstmt);   

      JdbcResourceManager.close(conn);    

     JdbcSessionFactory.closeSession();   

  }

    public static void main(String[] args) throws Exception {   

      add();    

     read();   

  }

}

 

使用JDBC處理MySQL大文本和大資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.