JDBC读写Oracle10g的CLOB、BLOB

简介:
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盘,文件已经复制出一份,说明写入和读取都是成功的。
 
 
 
如果是将一个字符串写入Clob字段,则需要做简单的变化:
   //设置二进制CLOB参数    
  String xxx =  "abcdefg"
  ps.setCharacterStream(3,  new StringReader(xxx), xxx.getBytes( "GBK").length);    
  ps.executeUpdate();    
  in.close();
 


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/321882,如需转载请自行联系原作者
相关文章
|
4月前
|
SQL Oracle 关系型数据库
java往oracle存clob类型的值时,字符长度过长怎么办?
java往oracle存clob类型的值时,字符长度过长怎么办?
70 1
|
2月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“
|
6月前
|
Oracle 关系型数据库 Java
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
|
7月前
|
Oracle 关系型数据库 Java
java处理oracle的Clob字段类型的坑和2种解决办法
java处理oracle的Clob字段类型的坑和2种解决办法
|
11月前
|
Oracle Java 关系型数据库
maven中安装oracle jdbc包到仓库以及引入
maven中安装oracle jdbc包到仓库以及引入
|
11月前
|
SQL Oracle Java
Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
197 0
|
SQL Oracle Java
Java java jdbc thin远程连接并操作Oracle数据库
Java java jdbc thin远程连接并操作Oracle数据库
120 0
|
Oracle 关系型数据库 数据处理
通过Oracle识别字符串中的中文or字母or数字来介绍全角半角转换函数(to_multi_byte/to_single_byte)在varchar/clob中的使用案例
在日常处理数据的过程中,大家肯定会遇到很多奇奇怪怪的字符,然后还要对这些字符处理,比如***你有个需求:识别字符串中的中文或是识别字母或是识别数字,甚至都识别出来然后剔除or保留某些字符汉字或数字***。 你去百度了一下相关问题,然后得到的结果大都是用正则 '\4E00' and '\9FA5'来识别中文范围用a-zA-z或0-9或[:digit:][:alpha:]来识别字母或数字。但是如果你的字符串中包含全角字符,那这样是识别不全的!!!那怎么做才能够正确的识别中文、字母、数字呢???那就要考虑先做全半
通过Oracle识别字符串中的中文or字母or数字来介绍全角半角转换函数(to_multi_byte/to_single_byte)在varchar/clob中的使用案例
|
Java 数据库连接
JDBC学习(七):操作Blob类型数据
JDBC学习(七):操作Blob类型数据
|
Java 数据库连接
Jdbc读取Blob数据
Jdbc读取Blob数据

推荐镜像

更多