`
leh627
  • 浏览: 23810 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

tomcat连接池中解决clob字段的问题

阅读更多
1. 关于CLOB(Character Large Object)
CLOB可用于存放大文本数据,最多可存储4GB数据,在应用开发中比较常见.java提供的sql.Clob类与之对应.它提供两个方法来读取Clob的数据:
getCharacterStream() 方法返回按unicode编码的输入流(java.io.Reader对象)
getAsciiStream() 方法返回按ASCII编码的输入流(java.io.InputStream对象)
所以如果你的数据库中有可能存储中文字符的话,就要使用前一个方法.
现在举一个实际的例子,让我一步步学习如何使用CLOB.
首先,创建一个含CLOB字段的表:
create table test (id INTEGER, content clob);

接下来, 我们通过JSP往这张表里插入一条记录,然后再获取显示它.
插入操作:
<%
Connection con = DriverManager.getConnection(...); //该行从略
String content = request.getParameter("content"); //大文本数据
con.setAutoCommit(false); //*
String sql = "insert into test values(1, empty_clob())";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql);

con.commit(); //*
sql = "select content from test where id=1 for update";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
//如果用的是tomcat连接池此处使用  
//oracle.sql.CLOB clob = (CLOB) ((org.apache.commons.dbcp.DelegatingResultSet)rs).getClob("CONTENT");
clob.putString(1, content);
sql = "update test set content=? where id=" + seq;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setClob(1, clob);
pstmt.executeUpdate();
}
%>


以上需要注意的几点是:
1)clob类型的数据不能直接insert,要先通过empty_clob()方法给它分配一个locator(同理,blob的用empty_blob()函数分配locator).然后把它select出来(此时它当然没有数据,但结果集不是空的),得到一个Clob的对象,修改该对象的内容让它满足我们的需要,再通过update方法更新该行记录.

2) 通过select修改含lob类型的记录时一定要锁定该行(通过for update关键字实现),否则oracle会报错.

3) 刚插入的记录就select for update, 会出现"违反读取顺序"错误,解决办法是将自动提交功能置为false,即不允许自动提交,然后commit它,再select,就可以了. 这就是上面那段代码里//*两行的作用.

4)补充点:如果用的 tomcat连接池,应该照上面插入数据时的写,否则样报错java.lang.ClassCastException ,在oracle9i以上好像没这个问题

下面,我们将刚插入的记录从数据库中读取出来并显示之:

<%
String sql = "select content from test where doc_id=1";
ResultSet rs = stmt.executeQuery(sql);
String content = "";
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("content");
if (clob != null){
Reader is = clob.getCharacterStream();
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
while (s != null) {
content += s + "<br>";
s = br.readLine();
}
}
out.println(content);
%>
分享到:
评论

相关推荐

    dblink_clob字段异常解决方案

    在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为CLOB字段在远程数据库中的处理方式与本地数据库不同所导致的。下面将讨论解决dblink_clob字段异常的解决方案。 什么是dblink? DBLink...

    读取oracle数据库中clob字段的值

    ### 读取Oracle数据库中CLOB字段的值 在处理Oracle数据库时,经常会遇到需要读取CLOB(Character Large Object)类型字段的情况。CLOB主要用于存储大量的文本数据,如文章、文档等内容。由于CLOB类型的数据量可能...

    java中操作oracle的CLOB字段精解

    在 Java 中操作 CLOB 字段需要使用 Oracle 的 JDBC 驱动程序,首先我们需要在 Java 项目中引入 Oracle 的 JDBC 驱动程序,然后使用 Connection 对象连接到 Oracle 数据库,最后使用 PreparedStatement 或 Statement ...

    ORACLE中CLOB字段转String类型

    ### ORACLE中CLOB字段转String类型 在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何...

    数据库读取clob字段

    在Oracle数据库中读取CLOB字段通常涉及数据库连接、SQL查询、CLOB对象处理以及资源管理等多个环节。上述示例展示了如何在Java中实现这一过程。需要注意的是,在实际应用中还应该考虑更多的异常处理机制,以确保程序...

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    在Oracle数据库中,CLOB(Character Large Object)字段类型用于存储大量的文本数据,如XML文档、长篇文章或者大量字符数据。然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-...

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

    SQL Server 中 Image 类型数据导出到 Oracle 的 CLOB 字段中 在进行数据库迁移或数据交换时,需要将不同数据库管理系统之间的数据类型进行转换。在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 ...

    Oracle如何对CLOB行字段来执行全文检索

    Oracle 数据库中,CLOB 行字段是一种常用的数据类型,用于存储大文本数据。然而,在 Oracle8i 版本之前,对大字段 CLOB 仍然不支持在 where 子句直接的 Like 操作。这使得开发者无法直接对 CLOB 字段中的内容进行 ...

    Oracle如何插入CLOB字段值

    Oracle如何插入CLOB字段值,附件为简单的示例代码。Oracle如何插入CLOB字段值,附件为简单的示例代码。

    Python如何应用cx_Oracle获取oracle中的clob字段问题

    当查询结果中包含CLOB字段时,直接使用`cursor.fetchall()`可能会遇到问题,因为CLOB字段的数据量可能很大,一次性加载到内存可能导致缓冲区不足。在示例代码中,我们看到查询结果中包含了一个CLOB对象,如`...

    修改clob blob 字段

    修改clob blob 字段 修改clob blob 字段 修改clob blob 字段

    spring+hibernate 解决大字段(clob)

    在企业级应用开发中,经常会遇到需要存储大量文本或二进制数据的情况,这时就需要用到数据库的大字段类型如CLOB(Character Large Object)和BLOB(Binary Large Object)。本文将详细介绍如何在Spring与Hibernate...

    jdbc 处理clob类型字段

    本主题主要探讨如何使用JDBC有效地操作Oracle数据库中的CLOB类型字段,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)等操作。 首先,我们需要理解CLOB的基本概念。CLOB是一种数据库对象,...

    Hibernate存储Clob字段的方式总结

    Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...

    数据库中clob类型转换的问题 数据库中clob类型转换的问题

    随后,将深入分析CLOB类型转换过程中可能遇到的问题,并提供相应的解决方案。 ### CLOB类型概述 CLOB是一种用于存储大量文本数据的数据类型,例如文章、报告或长文本字段等。与BLOB(Binary Large Object)不同的是...

    关于oracle中clob字段查询慢的问题及解决方法

    总结来说,解决Oracle中CLOB字段查询慢的问题,可以采取以下策略: 1. 使用DBMS_LOB包的函数进行部分数据转换和查找。 2. 创建全文索引来加速文本搜索,但需考虑额外的存储和维护成本。 3. 如果可能,优化查询语句,...

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

    在IT领域,尤其是在数据库操作与Java编程的交集部分,理解和掌握如何在Java中存取Oracle数据库中的CLOB(Character Large Object)类型字段是至关重要的技能。CLOB数据类型主要用于存储大量的文本信息,如文章、报告...

    DELPHI的CLOB和BLOB存取处理.zip_DELPHI的CLOB和BLOB存取处理_hallzgz

    - 数据库连接池的管理也是优化性能的重要环节,合理配置可以减少数据库连接创建和销毁的开销。 在实际开发中,理解和掌握这些技术点对于高效地处理DELPHI中的CLOB和BLOB至关重要。通过正确使用Stream对象、分块...

    向Oracle数据库插入Clob大段文本解决方法

    本文将详细介绍如何有效地向Oracle数据库插入Clob大段文本,以及在操作过程中可能遇到的问题与解决方案。 ### 一、理解CLOB类型 CLOB类型是Oracle数据库中用于存储大量文本数据的数据类型,它可以存储最大为4GB的...

Global site tag (gtag.js) - Google Analytics