Oracle大字段纯jdbc存储方法

开发 后端
也不知道为什么,也许凭着自己是数据库厂商老大的地位,只有oracle对大字段的处理不符合jdbc的标准,因此才出现如下对oracle大字段特殊处理的方法,当然hibernate或ibatis是自己封装了如下的特殊处理。

目录:

1、通用大字段jdbc存储方法

2、oracle Clob存储方法

3、oracle Blob存储方法

内容:

也不知道为什么,也许凭着自己是数据库厂商老大的地位,只有oracle对大字段的处理不符合jdbc的标准,因此才出现如下对oracle大字段特殊处理的方法,当然hibernate或ibatis是自己封装了如下的特殊处理。

1、通用大字段jdbc存储方法

像常用的数据库,如DB2、mysql、sqlserver、sybase等都是支持标准的大字段处理,这样才使得我们的程序能够写的很流畅很通用,当然这也是标准存在的意义。接下来按照标准的方式师范一下使用方法。

首先,分别构造两个类,实现java.sql包下的Blob、Clob接口,完成接口提供的方法,并为其增加相应的构造函数,如BlobImpl:

Java代码

 

  1. public class BlobImpl implements Blob {     
  2.     
  3.     private byte[] binaryData = null;     
  4.     
  5.     public BlobImpl(byte[] data) {     
  6.         setBinaryData(data);     
  7.     }     
  8.     
  9. ...     

如ClobImpl:

Java代码

 

  1. public class ClobImpl implements Clob {     
  2.          
  3.     public ClobImpl(String data){     
  4.         this.charData = data;     
  5.     }     
  6.     
  7. ...     
  8. }  

然后,通过byte数组或String构造Blob、Clob实例:

Java代码

 

  1. Blob blob = new BlobImpl(data);     
  2.     
  3. Clob clob = new ClobImpl(data);  

最后,通过PreparedStatement实例的setBlob方法将数据存储到数据库中。

Java代码

 

  1. pst.setBlob(fieldIndex, new BlobImpl((byte[]) value));  
  2.  
  3. pst.setClob(fieldIndex, new ClobImpl(((String) value)));  

2、oracle Clob存储方法

oracle构造Clob实例时,需要持有Connection,然后利用oracle Clob类提供的静态方法构造出空的clob实例,最后将数据写入该clob实例中,并通过上述方法存储到数据库中。构造示例代码如下:

Java代码

 

  1. public CLOB getCLOB(Connection conn, String data) throws Exception {     
  2.     CLOB clob = null;     
  3.     Writer writer = null;     
  4.     try {     
  5.         clob = CLOB.createTemporary(conn, false,   CLOB.DURATION_SESSION);     
  6.         writer = clob.getCharacterOutputStream();     
  7.         writer.write((data).toCharArray());     
  8.         writer.flush();     
  9.     } catch (Exception e) {     
  10.         throw e;     
  11.     } finally {     
  12.         if (writer != null) {     
  13.     try {     
  14.          writer.close();     
  15.               } catch (IOException e) {     
  16.                    Logger.log(Logger.WARNING, e.getMessage(), e);     
  17.                    e.printStackTrace();     
  18.               }     
  19.         }     
  20.      }     
  21.      return clob;     
  22. }    

3、oracle Blob存储方法

oracle构造Blob实例时,同样需要持有Connection,然后利用oracle Blob类提供的静态方法构造出空的blob实例,最后将数据写入该blob实例中,并通将其存储到数据库中。构造示例代码如下:

Java代码

 

  1. public BLOB getBLOB(Connection conn, byte[] data) throws Exception {     
  2.     BLOB blob = null;     
  3.     OutputStream output = null;     
  4.     try {     
  5.         blob = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);     
  6.         output = blob.getBinaryOutputStream();     
  7.         output.write(data, 0, data.length);     
  8.     } catch (Exception e) {     
  9.         throw e;     
  10.     } finally {     
  11.         if (output != null) {     
  12.     try {     
  13.         output.close();     
  14.     } catch (IOException e) {     
  15.                   Logger.log(Logger.WARNING, e.getMessage(), e);     
  16.         e.printStackTrace();     
  17.     }     
  18.          }     
  19.     }     
  20.     return blob;     
  21. }    

【编辑推荐】

  1. 几个主流的Java连接池
  2. Java的JDBC数据库连接池实现方法
  3. Tomcat5+MySQL JDBC连接池配置
  4. 基于JMX监控下的JBoss数据库连接池
  5. JBoss配置mysql数据库连接池
责任编辑:金贺 来源: JavaEye博客
相关推荐

2010-08-31 13:30:15

PostgreSQL

2019-08-28 07:11:00

Oracle数据库LOB

2009-07-22 15:58:34

JDBC调用Oracl

2009-07-08 17:42:33

JDBC存储过程

2010-10-29 16:06:55

Oracle存储过程

2011-08-23 16:23:13

OracleMySQLSQL Server

2010-05-04 15:49:24

Oracle修改

2011-05-18 10:07:13

oracle存储

2009-07-17 13:54:51

JDBC存储过程

2009-07-08 17:17:16

JDBC调用存储过程

2011-08-25 09:31:43

JDBC调用Oracl

2017-09-04 11:48:56

MybatisOracle存储过程

2010-10-29 16:12:51

Oracle存储过程

2010-04-21 16:55:06

Oracle物理存储结

2016-11-01 15:05:35

VDI存储vSAN

2010-10-28 10:10:48

oracle存图片

2010-04-29 15:58:51

Oracle存储过程

2010-04-16 16:12:51

jdbc分页

2009-07-20 15:51:45

JDBC连接Oracl

2010-04-14 15:22:53

Oracle JDBC
点赞
收藏

51CTO技术栈公众号