- package test;
- import java.io.*;
- import java.util.*;
- import java.sql.*;
- /**
- * 展示JDBC存取ORACLE大型数据对象LOB几种情况的示范类
- *
- *
- * @version 1.0
- *
- */
- public class LobPros
- {
- /**
- * ORACLE驱动程序
- */
- private static final String DRIVER = "oracle.jdbc.driver.OracleDriver" ;
- /**
- * ORACLE连接用URL
- */
- private static final String URL = "jdbc:oracle:thin:@10.11.25.66:1521:wjc" ;
- /**
- * 用户名
- */
- private static final String USER = "wjc" ;
- /**
- * 密码
- */
- private static final String PASSWORD = "anyue" ;
- /**
- * 数据库连接
- */
- private static Connection conn = null ;
- /**
- * SQL语句对象
- */
- private static Statement stmt = null ;
- /**
- * @roseuid 3EDA089E02BC
- */
- public LobPros()
- {
- }
- /**
- * 往数据库中插入一个新的CLOB对象
- *
- * @param infile - 数据文件
- * @throws java.lang.Exception
- * @roseuid 3EDA04A902BC
- */
- public static void clobInsert(String infile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 插入一个空的CLOB对象 */
- stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES ('111', EMPTY_CLOB())" );
- /* 查询此CLOB对象并锁定 */
- ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE" );
- while (rs.next()) {
- /* 取出此CLOB对象 */
- oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL" );
- /* 向CLOB对象中写入数据 */
- BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
- BufferedReader in = new BufferedReader( new FileReader(infile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * 修改CLOB对象(是在原CLOB对象基础上进行覆盖式的修改)
- *
- * @param infile - 数据文件
- * @throws java.lang.Exception
- * @roseuid 3EDA04B60367
- */
- public static void clobModify(String infile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 查询CLOB对象并锁定 */
- ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE" );
- while (rs.next()) {
- /* 获取此CLOB对象 */
- oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL" );
- /* 进行覆盖式修改 */
- BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
- BufferedReader in = new BufferedReader( new FileReader(infile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * 替换CLOB对象(将原CLOB对象清除,换成一个全新的CLOB对象)
- *
- * @param infile - 数据文件
- * @throws java.lang.Exception
- * @roseuid 3EDA04BF01E1
- */
- public static void clobReplace(String infile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 清空原CLOB对象 */
- stmt.executeUpdate("UPDATE TEST_CLOB SET CLOBCOL=EMPTY_CLOB() WHERE ID='111'" );
- /* 查询CLOB对象并锁定 */
- ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE" );
- while (rs.next()) {
- /* 获取此CLOB对象 */
- oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL" );
- /* 更新数据 */
- BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
- BufferedReader in = new BufferedReader( new FileReader(infile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * CLOB对象读取
- *
- * @param outfile - 输出文件名
- * @throws java.lang.Exception
- * @roseuid 3EDA04D80116
- */
- public static void clobRead(String outfile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 查询CLOB对象 */
- ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_CLOB WHERE ID='111'" );
- while (rs.next()) {
- /* 获取CLOB对象 */
- oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL" );
- /* 以字符形式输出 */
- BufferedReader in = new BufferedReader(clob.getCharacterStream());
- BufferedWriter out = new BufferedWriter( new FileWriter(outfile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- out.close();
- in.close();
- }
- } catch (Exception ex) {
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * 向数据库中插入一个新的BLOB对象
- *
- * @param infile - 数据文件
- * @throws java.lang.Exception
- * @roseuid 3EDA04E300F6
- */
- public static void blobInsert(String infile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 插入一个空的BLOB对象 */
- stmt.executeUpdate("INSERT INTO TEST_BLOB VALUES ('222', EMPTY_BLOB())" );
- /* 查询此BLOB对象并锁定 */
- ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE" );
- while (rs.next()) {
- /* 取出此BLOB对象 */
- oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL" );
- /* 向BLOB对象中写入数据 */
- BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
- BufferedInputStream in = new BufferedInputStream( new FileInputStream(infile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * 修改BLOB对象(是在原BLOB对象基础上进行覆盖式的修改)
- *
- * @param infile - 数据文件
- * @throws java.lang.Exception
- * @roseuid 3EDA04E90106
- */
- public static void blobModify(String infile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 查询BLOB对象并锁定 */
- ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE" );
- while (rs.next()) {
- /* 取出此BLOB对象 */
- oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL" );
- /* 向BLOB对象中写入数据 */
- BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
- BufferedInputStream in = new BufferedInputStream( new FileInputStream(infile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * 替换BLOB对象(将原BLOB对象清除,换成一个全新的BLOB对象)
- *
- * @param infile - 数据文件
- * @throws java.lang.Exception
- * @roseuid 3EDA0505000C
- */
- public static void blobReplace(String infile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 清空原BLOB对象 */
- stmt.executeUpdate("UPDATE TEST_BLOB SET BLOBCOL=EMPTY_BLOB() WHERE ID='222'" );
- /* 查询此BLOB对象并锁定 */
- ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE" );
- while (rs.next()) {
- /* 取出此BLOB对象 */
- oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL" );
- /* 向BLOB对象中写入数据 */
- BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
- BufferedInputStream in = new BufferedInputStream( new FileInputStream(infile));
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * BLOB对象读取
- *
- * @param outfile - 输出文件名
- * @throws java.lang.Exception
- * @roseuid 3EDA050B003B
- */
- public static void blobRead(String outfile) throws Exception
- {
- /* 设定不自动提交 */
- boolean defaultCommit = conn.getAutoCommit();
- conn.setAutoCommit(false );
- try {
- /* 查询BLOB对象 */
- ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222'" );
- while (rs.next()) {
- /* 取出此BLOB对象 */
- oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL" );
- /* 以二进制形式输出 */
- BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(outfile));
- BufferedInputStream in = new BufferedInputStream(blob.getBinaryStream());
- int c;
- while ((c=in.read())!=- 1 ) {
- out.write(c);
- }
- in.close();
- out.close();
- }
- /* 正式提交 */
- conn.commit();
- } catch (Exception ex) {
- /* 出错回滚 */
- conn.rollback();
- throw ex;
- }
- /* 恢复原提交状态 */
- conn.setAutoCommit(defaultCommit);
- }
- /**
- * 建立测试用表格
- * @throws Exception
- */
- public static void createTables() throws Exception {
- try {
- stmt.executeUpdate("CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)" );
- stmt.executeUpdate("CREATE TABLE TEST_BLOB ( ID NUMBER(3), BLOBCOL BLOB)" );
- } catch (Exception ex) {
- }
- }
- /**
- * @param args - 命令行参数
- * @throws java.lang.Exception
- * @roseuid 3EDA052002AC
- */
- public static void main(String[] args) throws Exception
- {
- /* 装载驱动,建立数据库连接 */
- Class.forName(DRIVER);
- conn = DriverManager.getConnection(URL,USER,PASSWORD);
- stmt = conn.createStatement();
- /* 建立测试表格 */
- createTables();
- /* CLOB对象插入测试 */
- clobInsert("c:/clobInsert.txt" );
- clobRead("c:/clobInsert.out" );
- /* CLOB对象修改测试 */
- clobModify("c:/clobModify.txt" );
- clobRead("c:/clobModify.out" );
- /* CLOB对象替换测试 */
- clobReplace("c:/clobReplace.txt" ); </
展示JDBC存取ORACLE大型数据对象LOB几种情况的示范类
最新推荐文章于 2021-03-01 16:45:11 发布