这两天用Java任务管理系统Quartz做了一个定时发送邮件的事情。具体应用是这样的:我们需要在每天填写的任务系统中使用一张配置表,来设置提醒邮件的发送频率和日期。实现过程中前面还算比较顺利,最后在向T_XXTS_XX表中插入待发送邮件的HTML字符串时发生了错误,原因就是数据库中是Clob大字段而后台待存入的数据是String类型的字符串。我的第一反应是想办法将String类型的字符串转换为java.sql.Clob类型的数据。所在在网上找了一些资料,个人感觉比较可行的转换方式是如下的代码:
public static Clob stringToClob(String str) {
if (null == str)
return null;
else {
try {
java.sql.Clob c = new javax.sql.rowset.serial.SerialClob(str
.toCharArray());
return c;
} catch (Exception e) {
return null;
}
}
}
但是,悲剧的事情发生的,由于我们公司的基础平台是建立在JDK1.4版本之上的,而我本地的JRE环境确实JDK1.6的,所以就会导致我的代码编译器没有报错,但是static方法就是无法返回值。所以在这里需要注意一下的就是SerialClob这个转换类是在JDK1.5+才引入的类,早期的JDK版本中并没有这个类。
通过在网上的学习终于学会了使用输出流的方式将大字符串写入Clob中存入数据库,具体的实现方式如下:
1、首先我们先使用EMPTY_CLOB()向数据库中插入空值;
String saveSql = " INSERT INTO t_xxts_xx(wid,xh,xxmc,xxnr,sffsyj,sffsdx,sffsxtxx,fsrgh,cjrq,sffs) "
+ " VALUES( '" + wid + "','" + wid + "','[研究生任务计划]"
+ calendar[0]
+ "年 "
+ calendar[1]
+ "月 第"
+ calendar[2]
+ "周 任务统计',"
+ " EMPTY_CLOB(),'1','0','0','XT',to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'),'1') ";
2、Update Clob字段
String update_sql = "select xxnr from t_xxts_xx where wid='"+wid+"' for update";
使用JDBC获取Connection之后我们要将数据库的提交方式手动的修改为false
try {
Connection conn = DbUtil.getSysDbConnection();
conn.setAutoCommit(false);
conn.createStatement().executeUpdate(saveSql);
ResultSet rs = conn.createStatement().executeQuery(update_sql);
if (rs.next()) {
/* 取出此CLOB对象 */
oracle.sql.CLOB clob = null;
clob = (oracle.sql.CLOB) rs.getClob("xxnr");
/* 向CLOB对象中写入数据 */
BufferedWriter out = new BufferedWriter(clob
.getCharacterOutputStream());
try {
Logger.debug("str=" + sb.toString());
out.write(sb.toString());
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
Logger.error(e);
throw new SQLException(e);
}
}
rs.close();
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
如此这般,终于将大字符串存入了数据库中的Clob字段中。
分享到:
相关推荐
JDBC读写Oracle的CLOB字段
JDBC方式操作CLOB字段实例代码 。
把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来
主要是整合了jdbc处理clob类型的增删改查方法,有需要的同学可以看下
oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。
关于在oracle数据库中读取clob大字段问题
ORACLE中CLOB字段转String类型
通过jdbc读取oracle数据库的clob类型的字段转换为string类型
java读取oracle数据库中clob字段 把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来
数据库中clob类型转换的问题 数据库中clob类型转换的问题
CLOB字段处理 对CLOB进行存取的例子
该类中包含有多个方法对数据库中的clob字段进行查询、插入、事物处理、批处理、调用存储过程等操作。使用的是myeclipse8.6,oracle11g,测试的时候执行手动建个表xml_buffer,包含id、xmlcontent字段即可,然后在...
kettle通过java代码将数据库blob 字段抽取到本地文件
CLOB字段类型报错 ORA-01704:文字字符串过长的解决
向Oracle数据库插入Clob大段文本解决方法
运用Java如何存取Oracle中的CLOB类型字段
oracleoracleoracleoracleoracleoracleoracleoracleoracleoracleoracleoracleoracleoracleoracleoracle
dblink_clob字段异常解决方案,解决dblink连接远程数据库时无法使用clob字段的问题
最近在用oracle的过程中用到了对blob字段模糊查询的问题。接下来通过本文给大家分享关于oracle中clob字段查询慢的问题及解决方法,需要的的朋友参考下吧
Mybatis 处理 CLOB、BLOB 类型数据