Oracle中大数据的存取

来源:互联网 发布:python编程实践 数据 编辑:程序博客网 时间:2024/05/01 01:49
Oracle数据库中LOB对象的存取 Web应用中的二进制文件、图片、大段文本等在数据库中的存取,通常都要用大对象(LOB)实现。.NET框架提供了OracleLob类来完成对Oracle中BLOB、CLOB、NCLOB等数据类型的操作。Oracle中实现大段文本存入CLOB字段的过程可以表示为:

    ①用SQL语句向数据库中添加一个CLOB字段为empty_clob( )的记录;

    ②开始事务,锁定刚加入的记录,把要写入CLOB字段的内容用流或CLOB的Write( )方法写入;

    ③提交事务,完成对CLOB字段的写入;

    Oracle中对CLOB类型数据的读取过程相对简单,不需要对数据库记录进行锁定:

    ①执行SQL 语句获得OracleDataReader对象;

    ②用OracleDataReader对象的GetOracleLob( )方法得到要读取的CLOB字段的OracleLob对象;

    ③用OracleLob对象的Read( )方法或流读出CLOB字段的内容;

 

Java用例:

……………………

String data = "大数据";

String Sql = "insert into table1(id,content,time) values ('"+ID+"'empty_clob(),sysdate)";
        conn.setAutoCommit(false);
        pSt = conn.prepareStatement(Sql);
        pSt.executeUpdate();
        if (updateClobContent(conn, ID, "table", "content", data)) {
          conn.commit();
          bSucc = true;
        }

 

private boolean updateClobContent(Connection conn, String Id, String tableName, String ColName, String content) throws
      Exception {
    /**
     * 使用预编译语句执行数据库操作.
     */
    boolean bSucc = false;
    ResultSet rs = null;
    String sSQL = "";
    sSQL = "select " + ColName + " from " + tableName + " where id= '" + ID + "' for update";
    try {
      oracle.sql.CLOB clob = null;
      rs = conn.prepareStatement(sSQL).executeQuery();
      if (rs.next()) {
        System.out.println("content= " + content);
        clob = (oracle.sql.CLOB) rs.getClob(1);
        fillClob(clob, content);
      }
      rs.close();
      bSucc = true;
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    return bSucc;
  }

 

private void fillClob(oracle.sql.CLOB clob, String data) throws Exception {
    if (data == null) {
      data = "no value !";
    }
    if (clob != null) {
      Writer wr = clob.getCharacterOutputStream();
      wr.write(data);
      wr.flush();
      wr.close();
    }
  }

原创粉丝点击