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