Oracle大字段纯jdbc存储方法
创始人
2024-07-21 19:20:16
0

目录:

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数据库连接池

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...