java 代码
- 作者:魏华超 weihuachao@sina.com
- package net.qysoft;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.sql.Blob;
- import java.sql.Connection;
- import java.sql.SQLException;
- /**
- * java 中对Blob数据的操作数据库的创建代码:
- * (1)db2 => create table blobTest ( id int not null generated always as identity, image blob )
- *添加用户java,密码java
- * (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中测试成功.
- *
- */
- //类的定义开始------------------------------------------------------------
- public class Test {
- public static void main(String[] args) throws Exception {
- 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