为了账号安全,请及时绑定邮箱和手机立即绑定

JDBC读写Oracle10g的CLOB、BLOB

标签:
Oracle


JDBC读写Oracle10g的CLOB、BLOB

 

环境:

Windows XP Professional 5.1 Build 2600 (Service Pack 3)

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

http://download.oracle.com/otn/utilities_drivers/jdbc/10201/ojdbc14_g.jar

JDK1.6u16

 

TNS名:

# tnsnames.ora Network Configuration File: d:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora 

# Generated by Oracle configuration tools. 

ORADB = 

    (DESCRIPTION = 

        (ADDRESS_LIST = 

            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) 

        ) 

        (CONNECT_DATA = 

            (SID = ORCL) 

        ) 

    ) 

MYORCL = 

    (DESCRIPTION = 

        (ADDRESS_LIST = 

            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) 

        ) 

        (CONNECT_DATA = 

            (SERVICE_NAME = myorcl) 

        ) 

    ) 

 

数据脚本:

create table TEST_ORALOB 

    ID         VARCHAR2(20), 

    TSBLOB BLOB not null, 

    TSCLOB CLOB not null 

)

 

测试代码:

package lavasoft.oralob.common; 

import oracle.sql.BLOB; 

import java.io.*; 

import java.sql.*; 

/** 

* JDBC读写Oracle10g的CLOB、BLOB 

* @author: leizhimin 2010-5-26 21:12:55 

*/ 

public class TestOraLob { 

        public static void main(String[] args) { 

                insertBlob(); 

                queryBlob(); 

        } 

        public static void insertBlob() { 

                Connection conn = DBToolkit.getConnection(); 

                PreparedStatement ps = null; 

                try { 

                        String sql = "insert into test_oralob (ID, TSBLOB, TSCLOB) values (?, ?, ?)"; 

                        ps = conn.prepareStatement(sql); 

                        ps.setString(1, "100"); 

                        //设置二进制BLOB参数 

                        File file_blob = new File("C:\\a.jpg"); 

                        InputStream in = new BufferedInputStream(new FileInputStream(file_blob)); 

                        ps.setBinaryStream(2, in, (int) file_blob.length()); 

                        //设置二进制CLOB参数 

                        File file_clob = new File("c:\\a.txt"); 

                        InputStreamReader reader = new InputStreamReader(new FileInputStream(file_clob)); 

                        ps.setCharacterStream(3, reader, (int) file_clob.length()); 

                        ps.executeUpdate(); 

                        in.close(); 

                } catch (IOException e) { 

                        e.printStackTrace(); 

                } catch (SQLException e) { 

                        e.printStackTrace(); 

                } finally { 

                        DBToolkit.closeConnection(conn); 

                } 

        } 

        public static void queryBlob() { 

                Connection conn = DBToolkit.getConnection(); 

                PreparedStatement ps = null; 

                Statement stmt = null; 

                ResultSet rs = null; 

                try { 

                        String sql = "select TSBLOB from TEST_ORALOB where id ='100'"; 

                        stmt = conn.createStatement(); 

                        rs = stmt.executeQuery(sql); 

                        if (rs.next()) { 

                                //读取Oracle的BLOB字段 

                                InputStream in = rs.getBinaryStream(1); 

                                File file = new File("c:\\a1.jpg"); 

                                OutputStream out = new BufferedOutputStream(new FileOutputStream(file)); 

                                byte[] buff1 = new byte[1024]; 

                                for (int i = 0; (i = in.read(buff1)) > 0;) { 

                                        out.write(buff1, 0, i); 

                                } 

                                out.flush(); 

                                out.close(); 

                                in.close(); 

                                //读取Oracle的CLOB字段 

                                char[] buff2 = new char[1024]; 

                                File file_clob = new File("c:\\a1.txt"); 

                                OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file_clob)); 

                                Reader reader = rs.getCharacterStream(1); 

                                for (int i = 0; (i = reader.read(buff2)) > 0;) { 

                                        writer.write(buff2, 0, i); 

                                } 

                                writer.flush(); 

                                writer.close(); 

                                reader.close(); 

                        } 

                        rs.close(); 

                        stmt.close(); 

                } catch (IOException e) { 

                        e.printStackTrace(); 

                } catch (SQLException e) { 

                        e.printStackTrace(); 

                } finally { 

                        DBToolkit.closeConnection(conn); 

                } 

        } 

}

 

执行后没有异常,查看C盘,文件已经复制出一份,说明写入和读取都是成功的。

 

 

http://download-west.oracle.com/docs/cd/B12037_01/java.101/b10979/toc.htm

http://www.oracle.com/technology/global/cn/sample_code/tech/java/sqlj_jdbc/files/oracle10g/index.html

http://www.oracle.com/technology/global/cn/sample_code/tech/java/sqlj_jdbc/index.html

http://www.oracle.com/technology/global/cn/sample_code/tech/java/codesnippet/jdbc/index.html

http://www.oracle.com/technology/global/cn/software/tech/java/sqlj_jdbc/index.html

 

如果是将一个字符串写入Clob字段,则需要做简单的变化:

  //设置二进制CLOB参数    

  String xxx = "abcdefg"; 

  ps.setCharacterStream(3, new StringReader(xxx), xxx.getBytes("GBK").length);    

  ps.executeUpdate();    

  in.close();

 

 

附件:http://down.51cto.com/data/2355883

©著作权归作者所有:来自51CTO博客作者leizhimin的原创作品,如需转载,请注明出处,否则将追究法律责任

Oracle10gJDBCJ2SE


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消