現在的位置: 首頁 > 移動開發 > 正文

JDBC怎麼讀寫MySQL的大欄位數據

2020年06月08日 移動開發 ⁄ 共 2978字 ⁄ 字型大小 評論關閉

  不管你是新手還是老手,大欄位數據的操作常常令你感到很頭痛。因為大欄位有些特殊,不同資料庫處理的方式不一樣,大欄位的操作常常是以流的方式來處理的。而非一般的欄位,一次即可讀出數據。下面學步園小編來講解下JDBC怎麼讀寫MySQL的大欄位數據?

  JDBC怎麼讀寫MySQL的大欄位數據

  環境:

  MySQL5.1

  JDK1.5

  一、認識MySQL的大欄位類型

  BLOB是一個二進位大對象,可以容納可變數量的數據。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB.它們只是可容納值的最大長度不同。

  有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT.這些對應4種BLOB類型,有相同的最大長度和存儲需求。

  BLOB列被視為二進位字元串(位元組字元串)。TEXT列被視為非二進位字元串(字元字元串)。BLOB列沒有字符集,並且排序和比較基於列值位元組的數值值。TEXT列有一個字符集,並且根據字符集的校對規則對值進行排序和比較。

  在TEXT或BLOB列的存儲或檢索過程中,不存在大小寫轉換。

  當未運行在嚴格模式時,如果你為BLOB或TEXT列分配一個超過該列類型的最大長度的值值,值被截取以保證適合。

  幾種類型的大欄位最大長度說明:

  TINYBLOB最大長度為255(2^[8]–1)位元組的BLOB列。

  TINYTEXT最大長度為255(2^[8]–1)字元的TEXT列。

  BLOB[(M)]最大長度為65,535(2^[16]–1)位元組的BLOB列。可以給出該類型的可選長度M.如果給出,則MySQL將列創建為最小的但足以容納M位元組長的值的BLOB類型。

  TEXT[(M)]最大長度為65,535(2^[16]–1)字元的TEXT列。可以給出可選長度M.則MySQL將列創建為最小的但足以容納M字元長的值的TEXT類型。

  MEDIUMBLOB最大長度為16,777,215(2^[24]–1)位元組的BLOB列。

  MEDIUMTEXT最大長度為16,777,215(2^[24]–1)字元的TEXT列。

  LONGBLOB最大長度為4,294,967,295或4GB(2^[32]–1)位元組的BLOB列。LONGBLOB列的最大有效(允許的)長度取決於客戶端/伺服器協議中配置最大包大小和可用的內存。

  LONGTEXT最大長度為4,294,967,295或4GB(2^[32]–1)字元的TEXT列。LONGTEXT列的最大有效(允許的)長度取決於客戶端/伺服器協議中配置最大包大小和可用的內存。

  二、創建測試環境

  createtableuser(

  idint(11)notnullauto_increment,

  namevarchar(50)notnull,

  pswdvarchar(50)defaultnull,

  piclongblob,

  remarklongtext,

  primarykey(id)

  );

  三、插入讀取blob

  importlavasoft.common.DBToolkit;

  importjava.io.*;

  importjava.sql.*;

  /**

  *操作MySQL5的blob欄位

  *

  *@authorleizhimin2009-12-311:34:50

  */

  publicclassBlobTest{

  publicstaticvoidmain(String[]args){

  insertBlob();

  queryBlob();

  }

  publicstaticvoidinsertBlob(){

  Connectionconn=DBToolkit.getConnection();

  PreparedStatementps=null;

  try{

  Stringsql=「insertintotestdb.user(name,pswd,pic)values(?,?,?)」;

  ps=conn.prepareStatement(sql);

  ps.setString(1,「zhangsan」);

  ps.setString(2,「111」);

  JDBC怎麼讀寫MySQL的大欄位數據

  //設置二進位參數

  Filefile=newFile(「D:\\new\\dbtools\\src\\res\\PIC.PNG」);

  InputStreamin=newBufferedInputStream(newFileInputStream(file));

  ps.setBinaryStream(3,in,(int)file.length());

  ps.executeUpdate();

  in.close();

  }catch(IOExceptione){

  e.printStackTrace();

  }catch(SQLExceptione){

  e.printStackTrace();

  }finally{

  DBToolkit.closeConnection(conn);

  }

  }

  publicstaticvoidqueryBlob(){

  Connectionconn=DBToolkit.getConnection();

  PreparedStatementps=null;

  Statementstmt=null;

  ResultSetrs=null;

  try{

  Stringsql=「selectpicfromuserwhereid=24」;

  stmt=conn.createStatement();

  rs=stmt.executeQuery(sql);

  if(rs.next()){

  InputStreamin=rs.getBinaryStream(1);

  Filefile=newFile(「D:\\new\\dbtools\\src\\res\\PIC_COPY.PNG」);

  OutputStreamout=newBufferedOutputStream(newFileOutputStream(file));

  byte[]buff=newbyte[1024];

  for(inti=0;(i=in.read(buff))>0;){

  out.write(buff,0,i);

  }

  out.flush();

  out.close();

  in.close();

  }

  rs.close();

  stmt.close();

  }catch(IOExceptione){

  e.printStackTrace();

  }catch(SQLExceptione){

  e.printStackTrace();

  }finally{

  DBToolkit.closeConnection(conn);

  }

  }

  }

  注意,要確保二進位數據長度足夠大,否則可能導致數據寫入不完整的問題。

  以上就是關於「JDBC怎麼讀寫MySQL的大欄位數據」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!

抱歉!評論已關閉.