`
yaya_wiscom
  • 浏览: 49938 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用JDBC存入数据库Clob字段

阅读更多

这两天用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字段中。

 

4
0
分享到:
评论
1 楼 jeloo 2013-01-29  

相关推荐

    sql server中的image类型的数据导出到oracle的clob字段中

    为了将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中,我们需要使用Java 语言和 JDBC 驱动程序。下面是一个示例代码,演示如何将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中: ...

    运用Java如何存取Oracle中的CLOB类型字段

    通过上述示例,我们可以看到如何使用Java通过JDBC操作Oracle数据库中的CLOB类型数据。这些基本的操作是开发人员在日常工作中经常需要用到的功能之一。掌握这些技术对于实现高效、可靠的数据库应用程序至关重要。此外...

    ActiveXObject和Clob字段的插入更新

    例如,使用Java的JDBC操作Oracle数据库中的Clob字段: ```java // 假设已有连接conn和PreparedStatement ps String sql = "INSERT INTO table_name (clob_column) VALUES (?)"; ps.setClob(1, new java.io.String...

    java将图片写入数据库,并读出来(blob clob)

    // 或者使用数据库驱动提供的Blob实现 Blob imageData = connection.createBlob(); imageData.setBinaryStream(1, fis, (int) imageFile.length()); ``` 4. **执行SQL语句** 将Blob对象绑定到...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...

    如何存取数据库图像字段.rar_图像 数据库_数据存取

    5. **编程接口**:开发人员通常会使用数据库驱动程序或ORM(对象关系映射)框架与数据库进行交互。例如,Python的pymysql和SQLAlchemy,Java的JDBC,或.NET的Entity Framework,它们都提供了处理BLOB数据的API。 6....

    iBATIS操作Oracle CLOB数据

    2. **插入操作**:当向包含CLOB字段的表插入数据时,可以使用`<sql>`和`<insert>`标签,通过`<bind>`或`<param>`来传递CLOB值。例如: ```xml INSERT INTO your_table (id, large_text) VALUES (#{id}, empty_...

    关于Clob类型在Hibernate中 的应用小结

    在Hibernate的XML映射文件中,你需要为这个Clob字段指定映射规则,例如: ```xml <column name="SUMMARY_CLOB" /> ``` **CRUD操作**: 4.2.1 **创建(Create)**: 在创建新记录时,你需要将待存入的文本...

    String_clob.zip_oracle

    当Java应用程序需要将`String`数据存入Oracle数据库的CLOB字段时,可以使用JDBC的`PreparedStatement`和`setClob()`方法。例如: ```java String content = "这是要存储的字符串"; PreparedStatement pstmt = ...

    Base64及oracle11g的jar.zip

    在处理CLOB数据时,如果需要将二进制数据(例如图片或PDF文件)存储到CLOB字段,我们可以先用Base64编码将二进制数据转换为字符串,然后存入CLOB;读取时再进行反向解码,恢复为原始的二进制数据。 在Java中,操作...

    网页在Oracle中存取图片

    2. JDBC操作:使用Java的JDBC驱动程序,将图片数据插入到Oracle数据库的BLOB字段中。涉及SQL语句执行,以及PreparedStatement的setBinaryStream方法或setBlob方法。 三、图片从数据库取出 1. 查询图片:通过SQL查询...

    Ant Lob Accessor-开源

    1. **上传文件到Oracle BLOB/CLOB**:用户可以通过指定文件路径,将文件内容直接存入Oracle数据库的BLOB或CLOB字段,无需编写复杂的数据库操作代码。 2. **下载Oracle LOB到文件系统**:同样,也可以从数据库中的...

    spring oracle blob

    为了能够将二进制数据存入Oracle数据库中,首先需要创建一个包含BLOB类型的表。以下是一个简单的创建表的例子: ```sql CREATE TABLE TBL_SYS_BULLETIN ( TPI_ID VARCHAR2(10) NOT NULL, TPI_TITLE VARCHAR2(200)...

Global site tag (gtag.js) - Google Analytics