JAVA读取Oracle数据库BLOB字段


给人帮忙,写了一个JAVA读取Oracle数据库BLOB字段的示例代码。

仅作备忘。


示例说明:

   1. 使用Oracle的JDBC驱动。

   2. BLOB字段中存储的是一个文件,把BLOB字段中存储的内容保存到磁盘中形成文件。


程序代码片断如下:

---------------------
package DBtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Blob;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class getDataFrmDB {
  public getDataFrmDB() {
  }

  public static void main(String args[]) {
    getDataFrmDB test = new getDataFrmDB();

    if (test.getDate()) {
      System.out.print("操作成功!");
    }
    else {
      System.out.print("操作异常!");
    }
  }

  public boolean getDate() {
    Connection conn = null;
    Statement sql = null;
    ResultSet rs = null;
    try {
      try {
        //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        //String sourceURL = "jdbc:odbc:ORDB";
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String sourceURL = "jdbc:oracle:thin:@127.0.0.1:1521:ORDB";
        String user = "thamsdt";
        String password = "thamsdt";

        conn = DriverManager.getConnection(sourceURL, user, password);

        sql = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                   ResultSet.CONCUR_UPDATABLE);

        //注:“ini”字段为BLOB字段
        String sqlstr = "Select username,ini from S_USER where usercode='ROOT'";

        rs = sql.executeQuery(sqlstr);

        while (rs.next()) {
          String name = rs.getString("username");

          //如下使用JdbcOdbcDriver则报错:Hit uncaught exception java.lang.UnsupportedOperationException
          //java.sql.Blob blob = rs.getBlob("ini");

          //注意这里的写法:使用的是OracleDriver
          oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("ini");

          String filepath = "C:/" + name + ".ini";
          System.out.println("输出文件路径为:" + filepath);
          try {
            InputStream in = blob.getBinaryStream(); // 建立输出流
            FileOutputStream file = new FileOutputStream(filepath);
            int len = (int) blob.length();
            byte[] buffer = new byte[len]; // 建立缓冲区
            while ( (len = in.read(buffer)) != -1) {
              file.write(buffer, 0, len);
            }
            file.close();
            in.close();
          }
          catch (Exception e) {
            System.out.println("I/O Exception.");
            return false;
          }
        }
      }
      finally {
        rs.close();
        sql.close();
        conn.close();
      }
    }
    catch (SQLException e) {
      System.out.println("SQLException.");
      return false;
    }
    catch (ClassNotFoundException e) {
      System.out.println("ClassNotFoundException.");
      return false;
    }
    return true;
  }
}

---------------------


                                                                                            By  JRQ

                                                                                       2008/04/15  · 京
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值