Oracle大字段纯jdbc存储方法

目录:

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

2、oracle Clob存储方法

3、oracle Blob存储方法

内容:

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

 

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

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

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

 

public class BlobImpl implements Blob {

	private byte[] binaryData = null;

	public BlobImpl(byte[] data) {
		setBinaryData(data);
	}

...
}

     如ClobImpl:

public class ClobImpl implements Clob {
	
	public ClobImpl(String data){
		this.charData = data;
	}

...
}

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

Blob blob = new BlobImpl(data);

Clob clob = new ClobImpl(data);

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

pst.setBlob(fieldIndex, new BlobImpl((byte[]) value));

pst.setClob(fieldIndex, new ClobImpl(((String) value)));

 2、oracle Clob存储方法

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

 

public CLOB getCLOB(Connection conn, String data) throws Exception {
    CLOB clob = null;
    Writer writer = null;
    try {
        clob = CLOB.createTemporary(conn, false,   CLOB.DURATION_SESSION);
        writer = clob.getCharacterOutputStream();
        writer.write((data).toCharArray());
        writer.flush();
    } catch (Exception e) {
        throw e;
    } finally {
        if (writer != null) {
	try {
	     writer.close();
              } catch (IOException e) {
                   Logger.log(Logger.WARNING, e.getMessage(), e);
                   e.printStackTrace();
              }
        }
     }
     return clob;
}

 3、oracle Blob存储方法

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

public BLOB getBLOB(Connection conn, byte[] data) throws Exception {
    BLOB blob = null;
    OutputStream output = null;
    try {
        blob = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);
        output = blob.getBinaryOutputStream();
        output.write(data, 0, data.length);
    } catch (Exception e) {
        throw e;
    } finally {
        if (output != null) {
	try {
	    output.close();
	} catch (IOException e) {
                  Logger.log(Logger.WARNING, e.getMessage(), e);
	    e.printStackTrace();
	}
         }
    }
    return blob;
}

 

你可能感兴趣的:(oracle,jdbc,ibatis,db2,Sybase)