java blob

package net.qysoft;java

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.SQLException;
sql


/**
 * java 中對Blob數據的操做數據庫的建立代碼:
數據庫

* (1)db2 => create table blobTest ( id int not null generated always as identity, image blob  )app

 *添加用戶java,密碼javaide

 * (2) db2=>! net
 * user java java /add java分配權限
函數

 *(3)db2 => grant select,insert,update,delete on
 * table weihuachao.blobTest to user java
 *
 *
 * @author weihuachao
 *  如下代碼在microsoft 2003 系統,DB2 9.0中測試成功.
 *
 */
測試

//類的定義開始------------------------------------------------------------spa

public class Test {對象

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

  Test test = new Test();
  Connection conn = test.createConnection();


  // Blob對象的插入的方法:
  try {


   // 建立插入語句.
   java.sql.PreparedStatement preparedStatement = conn
     .prepareStatement("insert into weihuachao.blobTest(image)values(?)");


   //建立文件對象:
   
   File file=new File("c:/a.jpg");


   // 建立流對象:
   java.io.BufferedInputStream imageInput = new java.io.BufferedInputStream(
     new java.io.FileInputStream(file));


   //參數賦值:
   preparedStatement.setBinaryStream(1, imageInput,(int) file.length());


   //執行語句
   preparedStatement.executeUpdate();
   
   
   
   //------------------------------------------------------------------
   //Blob的讀取工做:


   java.sql.Statement st=conn.createStatement();


   java.sql.ResultSet rs=st.executeQuery("select image from weihuachao.blobTest");


   while(rs.next())
   {
    //讀取Blob對象
    Blob blob= (Blob) rs.getBlob(1);


    //Blob對象轉化爲InputStream流
    java.io.InputStream inputStream =blob.getBinaryStream();


    //要寫入的文件
    File fileOutput = new File("c:/backa.jpg");


    //文件的寫入流的定義
    FileOutputStream fo = new FileOutputStream(fileOutput);


    int c;
    //讀取流並寫入到文件中
    while ((c = inputStream.read()) != -1)
    fo.write(c);


    //流的關閉:
    fo.close();

   }

  } catch (SQLException e) {


   // TODO 自動生成 catch 塊
   e.printStackTrace();
  }catch(java.io.FileNotFoundException ex)
  
  {
   
   ex.printStackTrace();
  }catch(java.io.IOException ex)
  {
   
   ex.printStackTrace();
  }
  finally
  {
   try {
    conn.close();
   } catch (SQLException e) {


    // TODO 自動生成 catch 塊
    e.printStackTrace();
   }
   
  }

 }

 /**
  * 定義數據庫鏈接的方法
  *
  * @return
  */
 private Connection createConnection() {
  Connection conn = null;
  try {


   Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");

   conn = java.sql.DriverManager.getConnection("jdbc:db2:sample",
     "java", "java");


  } catch (SQLException ex1) {
   ex1.printStackTrace();


  } catch (ClassNotFoundException ex) {
   ex.printStackTrace();
  }
  return conn;
 }

}//結束.

 

總結: JAVA 對DB2中的BLOB對象的操做,主要是使用流的技術實現.對BLOB的實現主要步驟有:

(1)定義要寫入的文件  File file=new File("c:/a.jpg");

(2)定義文件的寫入流

  java.io.BufferedInputStream imageInput = new java.io.BufferedInputStream(
     new java.io.FileInputStream(file));

(3)使用函數寫入:

   preparedStatement.setBinaryStream(1, imageInput,(int) file.length());

(4)執行SQL語句:

對BLOB的讀取採起的步驟有:

(1)讀取Blob的對象:  Blob blob= (Blob) rs.getBlob(1);

(2)把Blob的對象轉化爲流:

   java.io.InputStream inputStream =blob.getBinaryStream();
(3)定義要寫入的文件
    File fileOutput = new File("c:/backa.jpg");
(4)文件的寫入流的定義
    FileOutputStream fo = new FileOutputStream(fileOutput);

(5)寫入文件(流的寫入技術,就很少講了)
    int c;
    while ((c = inputStream.read()) != -1)

    {
    fo.write(c);

   }    //END

相關文章
相關標籤/搜索