处理blob和clob的通用类

阅读更多
public class LobUtil {
    private static final int BUFFER_SIZE = 4096;
    private LobUtil() {
    }
    public static synchronized void writeBLOB(ResultSet rs, String fieldName,
            byte[] buf) throws SQLException, IOException {
        if (buf == null) {
            return;
        }
        OutputStream os = null;
        Blob b = rs.getBlob(fieldName);
        if (b == null) {
            throw new SQLException("刚刚插入或更新的BLOB指针为空!");
        } else {
            // if (Conn.isUseConnectionPool()){
            // os =
            // ((weblogic.jdbc.vendor.oracle.OracleThinBlob)b).getBinaryOutputStream();
            // }
            // else{
            // os = ((oracle.sql.BLOB)b).getBinaryOutputStream();
            // }
            /**
             * @todo 需要最终改造为通用数据库处理接口
             */
            // 
            try {
                Method methodToInvoke = b.getClass().getMethod(
                        "getBinaryOutputStream", (Class[]) null);
                os = (OutputStream) methodToInvoke.invoke(b, (Object[]) null);
            } catch (Exception e) {
                throw new SQLException(e.getMessage());
            }
            // os = ( (oracle.sql.BLOB) b).getBinaryOutputStream();
            // 
            BufferedOutputStream bos = new BufferedOutputStream(os);
            bos.write(buf);
            bos.flush();
            bos.close();
        }
    }
    public static synchronized void writeBLOB(ResultSet rs, String fieldName,
            InputStream in) throws SQLException, IOException {
        if (in == null) {
            return;
        }
        OutputStream os = null;
        Blob b = rs.getBlob(fieldName);
        if (b == null) {
            throw new SQLException("刚刚插入或更新的BLOB指针为空!");
        } else {
            // if (Conn.isUseConnectionPool()){
            // os =
            // ((weblogic.jdbc.vendor.oracle.OracleThinBlob)b).getBinaryOutputStream();
            // }
            // else{
            // os = ((oracle.sql.BLOB)b).getBinaryOutputStream();
            // }
            // 
            try {
                Method methodToInvoke = b.getClass().getMethod(
                        "getBinaryOutputStream", (Class[]) null);
                os = (OutputStream) methodToInvoke.invoke(b, (Object[]) null);
            } catch (Exception e) {
                throw new SQLException(e.getMessage());
            }
            // os = ( (oracle.sql.BLOB) b).getBinaryOutputStream();
            // 
            BufferedOutputStream bos = new BufferedOutputStream(os);
            BufferedInputStream bis = new BufferedInputStream(in);
            byte buf[] = new byte[BUFFER_SIZE];
            int len = -1;
            while ((len = bis.read(buf)) != -1) {
                bos.write(buf, 0, len);
            }
            bis.close();
            bos.flush();
            bos.close();
        }
    }
    public static synchronized void writeCLOB(ResultSet rs, String fieldName,
            String buf) throws SQLException, IOException {
        if (buf == null) {
            return;
        }
        Writer wr = null;
        Clob c = rs.getClob(fieldName);
        if (c == null) {
            throw new SQLException("刚刚插入或更新的CLOB指针为空!");
        } else {
            // 
            try {
                Method methodToInvoke = c.getClass().getMethod(
                        "getCharacterOutputStream", (Class[]) null);
                wr = (Writer) methodToInvoke.invoke(c, (Object[]) null);
            } catch (Exception e) {
                throw new SQLException(e.getMessage());
            }
            // wr = ((oracle.sql.CLOB) c).getCharacterOutputStream();
            // 
            BufferedWriter bw = new BufferedWriter(wr);
            bw.write(buf);
            bw.flush();
            bw.close();
        }
    }
    public static synchronized void writeCLOB(ResultSet rs, String fieldName,
            InputStream in) throws SQLException, IOException {
        if (in == null) {
            return;
        }
        Writer wr = null;
        Clob c = rs.getClob(fieldName);
        if (c == null) {
            throw new SQLException("刚刚插入或更新的CLOB指针为空!");
        } else {
            //
            try {
              Method methodToInvoke = c.getClass().getMethod(
                  "getCharacterOutputStream", (Class[]) null);
              wr = (Writer) methodToInvoke.invoke(c, (Object[]) null);
            } catch (Exception e) {
              throw new SQLException(e.getMessage());
            }
            //wr = ((oracle.sql.CLOB) c).getCharacterOutputStream();
            //
            
            BufferedWriter bw = new BufferedWriter(wr);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            char buf[] = new char[BUFFER_SIZE];
            int len = -1;
            while ( (len = br.read(buf)) != -1) {
              bw.write(buf, 0, len);
            }
            br.close();
            bw.flush();
            bw.close();
        }
    }
}

你可能感兴趣的:(java)