闲来无事,想到备份clob数据的问题,就写了两个文件来备份clob, 表结构为:
sql 代码
- create table RULESETENTITY
- (
- ACTIVE NUMBER,
- DESCRIPTION VARCHAR2(255),
- JDOCLASS VARCHAR2(255),
- JDOID NUMBER not null,
- JDOVERSION NUMBER,
- LASTMODIFIEDDATE DATE,
- LASTMODIFIEDUSER VARCHAR2(255),
- NAME VARCHAR2(255),
- TYPE VARCHAR2(35),
- XML CLOB
- )
-
JAVA程序为:
java 代码
- package test;
-
- import java.io.BufferedReader;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.PrintStream;
- import java.io.Reader;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
-
- import oracle.sql.CLOB;
-
- public class DbAccess {
- @SuppressWarnings("deprecation")
- public static void main(String args[]) throws SQLException, IOException {
-
- DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
- Connection conn = DriverManager.getConnection(
- "jdbc:oracle:thin:@10.6.244.5:1521:devdb", "servinv1",
- "servinv1");
-
- Statement stmt = conn.createStatement();
-
- try {
-
- ResultSet rs = stmt.executeQuery("select name from rulesetentity");
-
- while (rs.next()) {
- String name = rs.getString("name");
- Statement stmt1 = conn.createStatement();
- ResultSet rset = stmt1
- .executeQuery("select rownum,name,xml from rulesetentity where name='"
- + name + "'");
- while (rset.next()) {
-
- oracle.sql.CLOB clob = (CLOB) ((oracle.jdbc.OracleResultSet) rset)
- .getClob("xml");
- Reader is = clob.getCharacterStream();
- BufferedReader br = new BufferedReader(is);
- String s = br.readLine();
- FileOutputStream fo = new FileOutputStream(name + ".dri");
- PrintStream so = new PrintStream(fo);
- while (s != null) {
- so.println(s);
- s = br.readLine();
- }
- so.close();
- }
- rset.close();
- stmt1.close();
- System.out.println(name);
- }
-
- rs.close();
- } catch (Exception e) {
- System.out.println("Error");
- } finally {
- stmt.close();
- conn.close();
- }
- }
-
- }
-
oracle的存储过程为:
sql 代码
- create or replace procedure test(rule_name varchar2) is
- bak_file utl_file.file_type;
- rule_xml clob;
-
- filename varchar2(255);
- l_buffer varchar2(32767);
- l_pos INTEGER := 1;
- l_amount BINARY_INTEGER := 1000;
- xml_length integer;
- begin
-
- select xml into rule_xml from rulesetentity where name = rule_name;
- filename := replace(rule_name||'.dri',' ','_');
-
- bak_file := utl_file.fopen('MYTEMP',filename,'w');
- xml_length := dbms_lob.getlength(rule_xml);
-
- dbms_output.put_line(rule_name);
- dbms_output.put_line(filename);
-
-
- dbms_output.put_line(TO_CHAR(xml_length));
-
-
- WHILE l_pos < xml_length LOOP
-
- DBMS_LOB.read(rule_xml,l_amount,l_pos,l_buffer);
- UTL_FILE.put_raw(bak_file, utl_raw.cast_to_raw(l_buffer),true);
- l_pos := l_pos + l_amount;
- END LOOP;
-
- utl_file.fclose(bak_file);
-
- end;
-
分享到:
相关推荐
JDBC读写Oracle的CLOB字段
本文主要介绍了在Java中处理Oracle数据库CLOB类型的基本方法,包括CLOB的读写操作、中文编码问题的处理以及一些额外的注意事项。通过这些知识点的学习,可以更高效地完成与Oracle数据库的交互任务。
Oracle数据库在处理大对象(LOB)类型,如Clob(Character Large Object)和Blob(Binary Large Object)时,有时需要专门的工具来进行高效且安全的数据导出。这些字段通常存储大量的文本或二进制数据,比如长篇文档...
本教程将介绍如何使用Java来读取和写入Oracle数据库中的CLOB字段。 首先,我们需要引入相关的Java和Oracle JDBC驱动库。在上述代码中,我们看到`import oracle.jdbc.driver.OracleDriver;`,这表示我们将使用Oracle...
在IT领域,尤其是在数据库操作与Java...值得注意的是,尽管示例代码提供了一个基础框架,但在实际应用中可能还需要考虑更多的异常处理和性能优化策略,例如使用事务管理来保证数据一致性,或者优化CLOB数据的读写效率。
SQL Server 中 Image 类型数据导出到 Oracle 的 CLOB 字段中 在进行数据库迁移或数据交换时,需要将不同数据库管理系统之间的数据类型进行转换。在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 ...
Oracle 提供了丰富的 API 来操作 CLOB 类型的数据,例如读写 CLOB 数据等。 #### 2. Hibernate 配置与实体类设计 为了能够通过 Hibernate 来存取 CLOB 数据,我们需要对 Hibernate 进行相应的配置,并且合理地设计...
- 管理CLOB数据时要考虑性能,大量读写可能影响效率。 - 避免一次性加载整个CLOB到内存,分块处理更高效。 - 考虑使用BFILE或NCLOB(非Unicode)类型,视具体需求而定。 以上就是Oracle中CLOB类型文字处理的相关...
接下来,我们来创建一个简单的ASP.NET页面,用于演示如何读写CLOB字段。首先,创建一个ASP.NET Web Form,添加一个TextBox控件用于输入或显示CLOB数据,一个Button控件用于执行数据库操作,以及可能需要的其他UI元素...
### Oracle中的BLOB和CLOB的区别 在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要...
Oracle的Clob数据类型在数据库中用于存储大对象(Large Object),如长文本、XML文档等大量字符数据。在Hibernate框架中,Clob类型的字段处理是数据库操作中的一个关键环节,尤其是在处理大量文本数据时。以下是对...
在Oracle数据库中,CLOB(Character Large Object)字段主要用于存储大量文本数据,如XML文档、长篇文章等。然而,由于其大数据量的特性,当涉及到CLOB字段的查询时,性能问题常常会出现,特别是进行模糊查询时。这...
更理想的解决方案是使用数据库提供的API或者存储过程来处理CLOB数据,通过流(Stream)的方式进行大对象的读写,这样可以避免一次性加载整个字符串到内存,有效防止因字符串过长引发的错误。 例如,你可以使用...
例如,频繁读写CLOB可能导致性能下降,因此在设计系统时要考虑读写频率和数据量。 6. **示例代码**:在Hibernate中,读取和写入CLOB的代码可能如下: ```java // 读取 Clob clob = entity.getLongText(); ...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。
以下是如何使用Java读写Oracle数据库中CLOB和BLOB字段的基本步骤: 1. **建立数据库连接**:使用`java.sql.DriverManager.getConnection()`方法,提供数据库URL、用户名和密码来创建`Connection`对象。 2. **创建...
读写Clob的操作与Blob类似,只是数据类型和处理方式略有不同: ```csharp public void WriteClob(string connectionString, string clobColumnName, string data) { using (var connection = new OracleConnection...
本篇文章将深入探讨如何在Delphi中对Oracle数据库的BLOB字段进行读写操作。 首先,你需要在Delphi项目中引入Oracle数据库访问的相关组件,如DBExpress或ADO。DBExpress是Delphi内置的一个轻量级数据库访问框架,而...
在实际应用中,为了提高性能,可能需要使用流式读写CLOB数据,避免一次性加载整个CLOB内容到内存中。Oracle JDBC驱动提供了OracleClob类,支持通过InputStream和OutputStream进行流式操作。 总的来说,处理Oracle...