1. 程式人生 > >[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存儲大量的文本數據)與BLOB(存儲大量的二進制數據)

[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存儲大量的文本數據)與BLOB(存儲大量的二進制數據)

最大 getch contex 般的 lar 字符串輸入 一次 rman rgs

一、 CLOB(Character Large Object )

– 用於存儲大量的文本數據

– 大字段有些特殊,不同數據庫處理的方式不一樣,大字段的操作常常是以流的方式來處理的。而非一般的字段,一次即可讀出數據。

• Mysql中相關類型:

– TINYTEXT最大長度為255 (28–1)字符的TEXT列。

– TEXT[(M)]最大長度為65,535 (216–1)字符的TEXT列。

– MEDIUMTEXT最大長度為16,777,215 (224–1)字符的TEXT列

– LONGTEXT最大長度為4,294,967,295或4GB (232–1)字符的TEXT列。

/***
 * 操縱大字段  測試CLOB 文本大對象
 */
package com.sxt.jdbc;

import java.io.ByteArrayInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class Demo06 { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection coon=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");
//1、向數據庫中寫入大字節的數據 PreparedStatement ps1=coon.prepareStatement("update t_user set myInfo=? where id=1"); ps1.setClob(1, new FileReader("d://LiBai.txt"));//從文件中讀取數據 //ps1.executeUpdate(); PreparedStatement ps2=coon.prepareStatement("update t_user set myInfo=? where id=2"); ps2.setClob(1, new InputStreamReader(new ByteArrayInputStream("杜甫,唐朝詩人".getBytes()))); //ps2.executeUpdate();//讀取字節流,將程序中的字符串輸入到數據庫中 //2、從數據庫中讀取數據 PreparedStatement ps3=coon.prepareStatement("select *from t_user where id=?"); ps3.setObject(1, 1); ResultSet rs=ps3.executeQuery(); while (rs.next()) {// Clob cl=rs.getClob("myInfo"); Reader reader=cl.getCharacterStream();//返回一個字符流 然後需要讀取字符流 int temp=0; while ((temp=reader.read())!=-1) { System.out.print((char)temp); } } } }

二、BLOB(Binary Large Object)

– 用於存儲大量的二進制數據

– 大字段有些特殊,不同數據庫處理的方式不一樣,大字段的操作常常是以流的方式來處理的。而非一般的字段,一次即可讀出數據。

• Mysql中相關類型:

– TINYBLOB最大長度為255(28–1)字節的BLOB列。

– BLOB[(M)]最大長度為65,535(216–1)字節的BLOB列。

– MEDIUMBLOB最大長度為16,777,215(224–1)字節的BLOB列。

– LONGBLOB最大長度為4,294,967,295或4GB(232–1)字節的BLOB列。

/***
 * 操縱大字段  測試BLOB 文本大對象 例如插入用戶頭像
 */
package com.sxt.jdbc;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Demo07 {
    public static void main(String[] args) throws Exception  {
        Class.forName("com.mysql.jdbc.Driver");
        Connection coon=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

        //1、向數據庫中寫入二進制的數據 如jpg圖片
        PreparedStatement ps1=coon.prepareStatement("update t_user set headImg=?  where id=1");
        ps1.setBlob(1, new FileInputStream("d://LiBai.jpg"));//從文件中讀取數據    
        ps1.executeUpdate();
        

        //2、從數據庫中讀取數據
        PreparedStatement ps3=coon.prepareStatement("select *from t_user where id=?");
        ps3.setObject(1, 1);
        ResultSet rs=ps3.executeQuery();
        while (rs.next()) {//
            Blob bl=rs.getBlob("headImg");
            InputStream reader=bl.getBinaryStream();//返回一個輸入流 然後需要讀取輸入流
            
            OutputStream os=new FileOutputStream("libai.jpg");
            int temp=0;
            while ((temp=reader.read())!=-1) {
                os.write(temp);                
            }
            reader.close();
            os.close();
        }
    }
}

三、封裝一些信息

MySQL:

mysqlDriver=com.mysql.jdbc.Driver

mysqlURL=jdbc\:mysql\://localhost\:3306/testjdbc

mysqlUser=root

mysqlPwd=123456

Oracle:

oracleDriver=oracle.jdbc.driver.OracleDriver

oracleURL=jdbc\:oracle\:thin\:@localhost\:1521\:orcl

oracleUser=scott

oraclePwd=tiger

【資源文件】

mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc\:mysql\://localhost\:3306/testjdbc
mysqlUser=root
mysqlPwd=123456

 【基本信息】

/**
 * 可以幫連接數據的信息寫出一各類
 * 具體信息在db.properties這個文件中
 */
package com.sxt.jdbc;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;


public class JDBCUtil {
    static Properties pros=null;
    static{//靜態代碼塊 在執行JDBCUtil這個類時只執行一次,用作初始化
         pros=new Properties();
        try {//讀取具體信息
            pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
    
    public static Connection getMysqlConnection() throws Exception {
        Class.forName(pros.getProperty("mysqlDriver"));//便於修改源數據庫的賬號和密碼等信息
        return  DriverManager.getConnection(pros.getProperty("mysqlURL"),
                pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
        
    }

}

[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存儲大量的文本數據)與BLOB(存儲大量的二進制數據)