继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JDBC读写Oracle10g的CLOB、BLOB

PIPIONE
关注TA
已关注
手记 1094
粉丝 147
获赞 702


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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP