Oracle 10g 中用 setString方法写CLOB字段

 

本文主要讲解

1、在Oracle 10g中的新的,方便处理Clob 大字段的 JDBC Api

2、以及一个java 中处理大字段的一个示例程序

A、什么是Clob

LOBs (Large Ojbects) 用来存储没有结构的数据,比如大文本内容,图像文件,或是视频等等。

·Oracle里有3种LOB,BLOB(Binary LOB),CLOB(Character LOB),和NCLOB(National Character LOB).

·每一个LOB对象会存储成为一个系统文件,被称为BFILEs.

B、处理Clob

在10g之前Oracle 提供了从java.sql.CLOB扩展的oracle.sql.CLOB对象来处理。从10g以后Oracle的jdbc加入了新的 API,OraclePreparedStatement增加了新的 Api.OraclePreparedStatement.setStringForClob(),这个方法没有

OraclePreparedStatement.setString()这个方法的32765的长度限制。正如你想象的一样,OraclePreparedStatement.getString(),这个方法照旧,还是一样可以从CLOB字段取得完整的内容。

C、示例程序

方法一:标准的jdbc api

注意,前边提到的 setStringForClob 方法,在标准的 jdbc Api 里面是没有,这里需要把一个 SetBigStringTryClob 属性设置到数据库连接,这样setString()这个方法就会试图用CLOB方式来处setString.

a、准备数据库

CREATE TABLE clob_tab (clob_col CLOB);

b、创建数据库连接

import java.sql.Connection;

import java.sql.DriverManager;

import oracle.jdbc.OracleDriver;

import java.util.Properties;

..........

// 定义数据库连接变量

String url = "jdbc:oracle:thin:@localhost:1521:orcl";

String user = "scott";

String password = "tiger";

// 准备创建数据库连接的属性

Properties props = new Properties();

props.put("user", user );

props.put("password", password);

props.put("SetBigStringTryClob", "true");

//注意,这是有必要的

// 加载数据库驱动

DriverManager.registerDriver(new OracleDriver());

// 获得数据库连接

Connection conn = DriverManager.getConnection( this.url, this.props );

c、小试:

PreparedStatement pstmt = conn.prepareStatement(

"INSERT INTO clob_tab VALUES(?)");

//读入大文本

String str = this.readFile("bigFile.txt");

//用setString方法来把大文本写入Clob字段

//要确保在 SetBigStringTryClob 属性已经设置

pstmt.setString(1, str);

pstmt.executeUpdate();

方法二:非jdbc标准,Oracle api方式

import java.sql.*;

import java.io.*;

import java.util.*;

import oracle.jdbc.*;

import oracle.jdbc.pool.*;

..........

// sql

String sql = "INSERT INTO clob_tab VALUES(?)";

// 读入大文本(大于 32765 字节).

//readFile() 只是一个方法用来读取文本,返回字符串

String str = this.readFile("bigFile.txt");

// 新建 OraclePreparedStatement , 注意比较这里

opstmt = (OraclePreparedStatement)conn.prepareStatement(sql);

// 调用 setStringForClob 方法来写入Clob

opstmt.setStringForClob(1,str);

// 执行

opstmt.executeUpdate();

...........

D、用getString()读取Clob

ResultSet.getString()方法并没有 32765 字节的限制,以下就是读取CLOB字段的方法

.....

PreparedStatement pstmt = null;

ResultSet rset = null;

.......

// 执行Sql,返回结果集

String sqlCall = "SELECT clob_col FROM clob_tab";

pstmt= conn.prepareStatement(sqlCall);

rset = pstmt.executeQuery();

String clobVal = null;

// 读取CLOB字段

while (rset.next()) {

clobVal = rset.getString(1);

System.out.println("CLOB length: "+clobVal.length());

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值