`

DB2中对BLOB对象的写入和读取--JAVA语言实现

阅读更多

DB2中对BLOB对象的写入和读取--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

分享到:
评论

相关推荐

    Java对db2中大对象的操作

    在这个教程中,我们将探讨如何在DB2数据库中使用Java进行BLOB对象的写入和读取。 首先,让我们了解什么是BLOB。BLOB是数据库中用来存储二进制大对象的数据类型,它可以容纳任何大小的二进制数据,如图像、音频文件...

    javaxml

    通过`XMLPARSE`函数,可以实现对XML数据的规范化处理,确保数据的完整性及正确性。 - **基本语法**: ```sql XMLPARSE(document XML_STRING [ AS DATATYPE [ PRESERVE WHITESPACE ] ]) ``` - **示例**: ```...

    quartz创建表sql

    在部署Quartz时,确保正确配置了Scheduler的数据库连接信息,这样Quartz才能正确地读取和写入这些表。同时,为了保证系统的稳定运行,建议定期备份这些表,以便在出现问题时能够快速恢复。 总结,创建Quartz表是...

    ODI LOB知识模块

    7. **性能优化**:处理CLOB数据时,ODI可能会采用分块读取和写入策略以提高性能,避免一次性加载整个大对象导致内存溢出。用户需要根据数据量和系统资源调整这些参数。 8. **注意事项**:由于CLOB数据的大小,可能...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    Devart UniDAC 9.1.1 Professional For RAD Studio 11 Alexandria

    1. **高性能数据访问**:UniDAC采用优化的数据库访问机制,实现了低级别数据库API的直接调用,从而提供高速的数据读取和写入性能。 2. **广泛的数据库支持**:除了上述提到的数据库,UniDAC还兼容Firebird、...

    使用JDBC4.0操作XML类型的字段(保存获取xml数据)的方法

    在Java数据库连接(JDBC)4.0版本中,一个重要的新特性是对XML数据类型的原生支持。这一特性使得Java程序员能够更方便地在数据库中存储和检索XML文档,而无需进行繁琐的类型转换。在SQL 2003标准中引入XML数据类型后...

Global site tag (gtag.js) - Google Analytics