`

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

阅读更多
                                          
java 代码
 
  1. 作者:魏华超  weihuachao@sina.com  
  2.   
  3. package net.qysoft;  
  4.   
  5. import java.io.File;  
  6. import java.io.FileOutputStream;  
  7. import java.sql.Blob;  
  8. import java.sql.Connection;  
  9. import java.sql.SQLException;  
  10.   
  11.   
  12. /** 
  13.  * java 中对Blob数据的操作数据库的创建代码: 
  14.  
  15. * (1)db2 => create table blobTest ( id int not null generated always as identity, image blob  ) 
  16.  
  17.  *添加用户java,密码java 
  18.  
  19.  * (2) db2=>! net 
  20.  * user java java /add java分配权限 
  21.  
  22.  *(3)db2 => grant select,insert,update,delete on 
  23.  * table weihuachao.blobTest to user java 
  24.  * 
  25.  * 
  26.  * @author weihuachao 
  27.  *  以下代码在microsoft 2003 系统,DB2 9.0中测试成功. 
  28.  * 
  29.  */  
  30.   
  31. //类的定义开始------------------------------------------------------------  
  32.   
  33. public class Test {  
  34.   
  35.  public static void main(String[] args) throws Exception {  
  36.   
  37.   Test test = new Test();  
  38.   Connection conn = test.createConnection();  
  39.   
  40.   
  41.   // Blob对象的插入的方法:  
  42.   try {  
  43.   
  44.   
  45.    // 创建插入语句.  
  46.    java.sql.PreparedStatement preparedStatement = conn  
  47.      .prepareStatement("insert into weihuachao.blobTest(image)values(?)");  
  48.   
  49.   
  50.    //创建文件对象:  
  51.      
  52.    File file=new File("c:/a.jpg");  
  53.   
  54.   
  55.    // 创建流对象:  
  56.    java.io.BufferedInputStream imageInput = new java.io.BufferedInputStream(  
  57.      new java.io.FileInputStream(file));  
  58.   
  59.   
  60.    //参数赋值:  
  61.    preparedStatement.setBinaryStream(1, imageInput,(int) file.length());  
  62.   
  63.   
  64.    //执行语句  
  65.    preparedStatement.executeUpdate();  
  66.      
  67.      
  68.      
  69.    //------------------------------------------------------------------  
  70.    //Blob的读取工作:  
  71.   
  72.   
  73.    java.sql.Statement st=conn.createStatement();  
  74.   
  75.   
  76.    java.sql.ResultSet rs=st.executeQuery("select image from weihuachao.blobTest");  
  77.   
  78.   
  79.    while(rs.next())  
  80.    {  
  81.     //读取Blob对象  
  82.     Blob blob= (Blob) rs.getBlob(1);  
  83.   
  84.   
  85.     //Blob对象转化为InputStream流  
  86.     java.io.InputStream inputStream =blob.getBinaryStream();  
  87.   
  88.   
  89.     //要写入的文件  
  90.     File fileOutput = new File("c:/backa.jpg");  
  91.   
  92.   
  93.     //文件的写入流的定义  
  94.     FileOutputStream fo = new FileOutputStream(fileOutput);  
  95.   
  96.   
  97.     int c;  
  98.     //读取流并写入到文件中  
  99.     while ((c = inputStream.read()) != -1)  
  100.     fo.write(c);  
  101.   
  102.   
  103.     //流的关闭:  
  104.     fo.close();  
  105.   
  106.    }  
  107.   
  108.   } catch (SQLException e) {  
  109.   
  110.   
  111.    // TODO 自动生成 catch 块  
  112.    e.printStackTrace();  
  113.   }catch(java.io.FileNotFoundException ex)  
  114.     
  115.   {  
  116.      
  117.    ex.printStackTrace();  
  118.   }catch(java.io.IOException ex)  
  119.   {  
  120.      
  121.    ex.printStackTrace();  
  122.   }  
  123.   finally  
  124.   {  
  125.    try {  
  126.     conn.close();  
  127.    } catch (SQLException e) {  
  128.   
  129.   
  130.     // TODO 自动生成 catch 块  
  131.     e.printStackTrace();  
  132.    }  
  133.      
  134.   }  
  135.   
  136.  }  
  137.   
  138.  /** 
  139.   * 定义数据库连接的方法 
  140.   * 
  141.   * @return 
  142.   */  
  143.  private Connection createConnection() {  
  144.   Connection conn = null;  
  145.   try {  
  146.   
  147.   
  148.    Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");  
  149.   
  150.    conn = java.sql.DriverManager.getConnection("jdbc:db2:sample",  
  151.      "java""java");  
  152.   
  153.   
  154.   } catch (SQLException ex1) {  
  155.    ex1.printStackTrace();  
  156.   
  157.   
  158.   } catch (ClassNotFoundException ex) {  
  159.    ex.printStackTrace();  
  160.   }  
  161.   return conn;  
  162.  }  
  163.   
  164. }//结束.  
  165.   
  166.    
  167.   
  DB2中对BLOB对象的写入和读取--JAVA语言实现
  自己随手写的一些代码,贴出供自己使用,加强记忆。

  1. 总结: JAVA 对DB2中的BLOB对象的操作,主要是使用流的技术实现.对BLOB的实现主要步骤有:  
  2.   
  3. (1)定义要写入的文件  File file=new File("c:/a.jpg");  
  4.   
  5. (2)定义文件的写入流  
  6.   
  7.   java.io.BufferedInputStream imageInput = new java.io.BufferedInputStream(  
  8.      new java.io.FileInputStream(file));  
  9.   
  10. (3)使用函数写入:  
  11.   
  12.    preparedStatement.setBinaryStream(1, imageInput,(int) file.length());  
  13.   
  14. (4)执行SQL语句:  
  15.   
  16. 对BLOB的读取采取的步骤有:  
  17.   
  18. (1)读取Blob的对象:  Blob blob= (Blob) rs.getBlob(1);  
  19.   
  20. (2)把Blob的对象转化为流:  
  21.   
  22.    java.io.InputStream inputStream =blob.getBinaryStream();  
  23. (3)定义要写入的文件  
  24.     File fileOutput = new File("c:/backa.jpg");  
  25. (4)文件的写入流的定义  
  26.     FileOutputStream fo = new FileOutputStream(fileOutput);  
  27.   
  28. (5)写入文件(流的写入技术,就不多讲了)  
  29.     int c;  
  30.     while ((c = inputStream.read()) != -1)  
  31.   
  32.     {  
  33.     fo.write(c);  
  34.   
  35.    }  
  36.     //END 
分享到:
评论
1 楼 handsome224521 2008-04-24  
看过就留名 好的

相关推荐

    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