📄 clobtools.java
字号:
package Information;
import java.sql.*;
import java.io.*;
import oracle.sql.*;
import comm.*;
public class ClobTools {
public ClobTools() {}
// 将信息内容strIn写入表tableName中条件为condition的记录的字段名为clobName的Clob字段
public static void writeClob(String tableName, String clobName, String strIn,String condition)
throws Exception, IOException,ClassNotFoundException {
// 定义数据库连接对象
DBOper dbOper = new DBOper();
Connection conn = null;
// 取得连接对象
conn = dbOper.getConnection();
try {
// 如果联接对象为null,则重新建立联接,并取得连接对象
if (conn == null)
dbOper.connectDB();
conn = dbOper.getConnection();
}
catch (Exception e) {
System.err.println("Exception in ClobTools.writeClob:" + e);
e.printStackTrace();
throw new Exception("ClobTools写错误1!");
}
// 定义Oracle包Clob对象,这里必须使用Oracle包的方法,不能使用java.sql提供的方法
oracle.sql.CLOB clob = null;
// 因为其它字段已经存在内容,则使用更新语句
// 必须先在指定Clob字段中放入空值empty_clob()
String sql1 = "update " + tableName + " set " + clobName +"=empty_clob() where " + condition;
// 设置不自动提交
conn.setAutoCommit(false);
// 执行更新操作
dbOper.getResultSet(sql1);
// 找到刚刚写入空值的CLob字段来更新
String sql2 = "select " + clobName + " from " + tableName + " where " +condition + " for update";
// 执行操作
ResultSet rs = dbOper.getResultSet(sql2);
// 执行更新Clob字段操作,将信息内容放入Clob字段
if (rs.next()) {
try {
// 将Clob字段的结果转换为Oracle指定的格式
clob = (oracle.sql.CLOB) rs.getClob(clobName);
// 读取Clob字段的字符输出流到write对象
Writer writer = clob.getCharacterOutputStream();
//定义StringReader对象,初始值为strIn
StringReader strRead = new StringReader(strIn);
//定义每次写入数据数组,长度为1024(1KB)
char[] b = new char[1024];
int len = 0;
//从strRead对象中读取数据到数组b,然后写入write对象
while ( (len = strRead.read(b)) != -1) {
//通过writer将b数组中的数据写入数据库的clob字段
writer.write(b, 0, len);
}
//关闭对象,释放资源
strRead.close();
writer.close();
rs.close();
//提交
conn.commit();
}
//如果出错,则抛出异常
catch (Exception e) {
System.err.println("Exception in ClobTools.writeClob:" + e);
e.printStackTrace();
conn.rollback();
conn.setAutoCommit(true);
throw new Exception("ClobTools写错误2!");
}
}
//关闭数据库连接
dbOper.close();
}
// 从Clob字段中读取数据
public static String readClob(String tableName, String clobName,String condition)
throws Exception,SQLException, ClassNotFoundException {
// 定义数据库连接对象
DBOper dbOper = new DBOper();
try {
// 取得连接对象
if (dbOper.getConnection() == null)
dbOper.connectDB();
}
catch (Exception e) {
System.err.println("Exception in ClobTools.writeClob:" + e);
e.printStackTrace();
throw new Exception("ClobTools读错误1!");
}
// 设置输出字符串对象
String strOut = null;
// 设置java的Clob对象
java.sql.Clob clob1 = null;
// 根据条件设置查询语句
String sql2 = "select " + clobName + " from " + tableName + " where " + condition;
// 执行查询操作
ResultSet rs1 = dbOper.getResultSet(sql2);
// 如果存在这个记录,则取出其值
if (rs1.next())
clob1 = rs1.getClob(1);
//如果字段值为null,则返回
if (clob1 == null) {
dbOper.close();
return null;
}
else {
// 如果Clob字段值不为空,则从clob字段中读取字符流到reader对象
Reader reader = clob1.getCharacterStream();
// 分配新字符串存储空间
StringBuffer strBuf = new StringBuffer();
int len = 0;
// 定义字符数组,大小为1024(1KB)
char[] b = new char[1024];
// 从reader对象中读取数据到数组b,并追加到strBuf对象
while ( (len = reader.read(b)) != -1) {
strBuf.append(b, 0, len);
}
//创建新的String对象strOut,初始值为strBuf
strOut = new String(strBuf);
}
//关闭对象,释放资源
rs1.close();
dbOper.close();
//返回strOut,其中包含指定的clob字段的值
return strOut;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -