[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存儲大量的文本數據)與BLOB(存儲大量的二進制數據)
一、 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(存儲大量的二進制數據)