`
log_cd
  • 浏览: 1098594 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java oracle clob

阅读更多
create table TEST_CLOB
(
  ID      INTEGER not null,
  NAME    VARCHAR2(20),
  CONTENT CLOB
)
alter table TEST_CLOB
  add primary key (ID);

package com.logcd.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.commons.io.FileUtils;

import oracle.sql.CLOB;

public class OracleClob {

	public static void main(String[] args) {

		Integer id = saveClobDataUseSQL("测试", getFileContentAsString(
				"D:/uploadDir/test.txt", true));

		readClobDataUseSQL(id, new File("D:/uploadDir/test2.txt"));
	}

	/**
	 * 保存Clob数据
	 * 
	 * @param name
	 *            数据名称
	 * @param data
	 *            字串数据
	 */
	@SuppressWarnings("deprecation")
	public static Integer saveClobDataUseSQL(String name, String data) {
		Connection conn = getConnection();
		Integer id = (int) (Math.random() * 100000);

		StringBuilder sqlBuilder = new StringBuilder();
		try {
			conn.setAutoCommit(false);
			Statement stmt = conn.createStatement();

			sqlBuilder.append("insert into TEST_CLOB(ID, NAME, CONTENT) ");
			sqlBuilder.append("values ( " + id);
			sqlBuilder.append(",'" + name + "'");
			sqlBuilder.append(", empty_clob()) ");// 插入一个空对象empty_clob()

			stmt.executeUpdate(sqlBuilder.toString());
			// 锁定数据行进行更新,注意“for update”语句
			String sqlUpd = "select CONTENT from TEST_CLOB where ID = " + id
					+ " for update";
			ResultSet rs = stmt.executeQuery(sqlUpd);
			if (rs.next()) {
				// 得到java.sql.Clob对象后强制转换为oracle.sql.CLOB
				CLOB clob = (CLOB) rs.getClob("CONTENT");
				Writer outStream = clob.setCharacterStream(0L);
				// data是传入的字符串,定义:String data
				char[] c = data.toCharArray();
				outStream.write(c, 0, c.length);

				outStream.flush();
				outStream.close();

				conn.commit();
				stmt.close();
			}

		} catch (Exception e) {
			try {
				conn.rollback();
				id = null;
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return id;
	}

	/**
	 * 读出数据并存成文件
	 * 
	 * @param id
	 * @param file
	 */
	public static void readClobDataUseSQL(Integer id, File file) {
		Connection conn = getConnection();
		try {
			Statement st = conn.createStatement();
			String sql = "select CONTENT from TEST_CLOB where ID = " + id;
			ResultSet rs = st.executeQuery(sql);

			if (rs.next()) {

				CLOB clob = (CLOB) rs.getClob("CONTENT");

				String result = convertClobToString(clob);
				System.out.println(result);
				FileUtils.writeStringToFile(file,result, "utf-8");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

	/**
	 * 将CLOB转换成字串
	 * @param clob
	 * @return
	 */
	public static String convertClobToString(CLOB clob) {
		String reString = "";
		try {
			Reader is = clob.getCharacterStream();// 得到流
			BufferedReader br = new BufferedReader(is);
			String s = br.readLine();
			StringBuffer sb = new StringBuffer();
			while (s != null) {
				sb.append(s);
				sb.append("\n");
				s = br.readLine();
			}
			reString = sb.toString().trim();
		} catch(Exception e) {
			e.printStackTrace();
		}
		return reString;
	}

	/**
	 * 取得数据库连接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@195.2.199.5:1521:orcl";
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, "testdb", "logcd");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
		return conn;
	}

	/**
	 * 读取文件内容
	 * 
	 * @param _url
	 * @param isLocal
	 * @return
	 */
	public static String getFileContentAsString(String _url, boolean isLocal) {
		StringBuilder strb = new StringBuilder();
		try {
			InputStreamReader read = null;
			;
			if (!isLocal) {
				URL url = new URL(_url);
				HttpURLConnection connection = (HttpURLConnection) url
						.openConnection();
				read = new InputStreamReader(connection.getInputStream());
			} else {
				File file = new File(_url);
				read = new InputStreamReader(new FileInputStream(file));
			}
			BufferedReader br = new BufferedReader(read);

			char[] cbuf = new char[1024];
			while (br.read(cbuf) != -1) {
				strb.append(cbuf);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return strb.toString();
	}

}
分享到:
评论
2 楼 log_cd 2010-06-30  
这个是oracle包问题,我用的是ojdbc14.jar!
1 楼 shim 2010-06-29  
java.sql.SQLException: 不支持的特性
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.dbaccess.DBError.throwUnsupportedFeatureSqlException(DBError.java:689)
at oracle.sql.CLOB.setCharacterStream(CLOB.java:1222)
at test.OracleClob.saveClobDataUseSQL(OracleClob.java:62)
at test.OracleClob.main(OracleClob.java:25)

相关推荐

    java读写oracle clob字段

    本教程将介绍如何使用Java来读取和写入Oracle数据库中的CLOB字段。 首先,我们需要引入相关的Java和Oracle JDBC驱动库。在上述代码中,我们看到`import oracle.jdbc.driver.OracleDriver;`,这表示我们将使用Oracle...

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

    ### 运用Java如何存取Oracle中的CLOB类型字段 #### 概述 在数据库操作中,经常会遇到处理大量文本数据的需求,例如存储文章、新闻、文档等。Oracle数据库提供了CLOB(Character Large Object)类型来存储大容量的...

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

    - **准备环境**:首先确保已经安装了Oracle数据库客户端和相应的驱动程序,例如JDBC驱动,以便通过编程语言(如Java、Python等)与数据库交互。 - **连接数据库**:使用相应的连接字符串、用户名和密码建立与...

    java存储oracle中的clob类型

    ### Java存储Oracle中的CLOB类型知识点详解 #### 一、CLOB类型简介及Java操作方法 CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型,在Oracle数据库中被广泛使用,可以支持最大4GB的数据量。...

    Oracle导出Clob,Blob工具

    Oracle数据库在处理大对象(LOB)类型,如Clob(Character Large Object)和Blob(Binary Large Object)时,有时需要专门的工具来进行高效且安全的数据导出。这些字段通常存储大量的文本或二进制数据,比如长篇文档...

    java中操作oracle的CLOB字段精解

    Java 中操作 Oracle 的 CLOB 字段精解 Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)...

    JAVA对clob的操作

    CLOB操作与BLOB操作类似,但是在获取java.sql.Clob对象后需要强制转换为oracle.sql.CLOB对象,以便使用getCharacterOutputStream()方法将数据写入CLOB字段。 三、出库操作 出库操作可以使用ResultSet.getBlob()或...

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

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

    clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle

    对于CLOB和BLOB字段,Oracle JDBC驱动提供了`oracle.jdbc.driver.OracleClob`和`oracle.jdbc.driver.OracleBlob`类,它们实现了Java的标准接口`java.sql.Clob`和`java.sql.Blob`。这两个接口提供了读取和写入大数据...

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

    在Java中,读取Oracle数据库中的CLOB字段可以通过以下步骤实现: 1. **获取CLOB对象**: 首先,通过执行查询语句并从结果集中获取CLOB对象。示例代码中的`lookmail[6]`表示从查询结果的第7个元素(下标为6)获取...

    ibatis oracle clob

    标题 "ibatis oracle clob" 涉及到的是在Java开发中,使用iBATIS框架与Oracle数据库交互时处理CLOB(Character Large Object)类型数据的问题。CLOB是Oracle数据库用于存储大文本数据(如XML文档、长篇文章等)的...

    jdbc连接例子 Oracle CLOB转换为String java调用存储过程之输出游标

    标题中的“jdbc连接例子 Oracle CLOB转换为String java调用存储过程之输出游标”涉及到三个主要的Java数据库编程知识点:JDBC连接、Oracle数据库中的CLOB类型处理以及通过Java调用存储过程处理输出游标。 1. JDBC...

    hibernate存取oracle的clob

    这里需要注意的是,`Clob` 类型在 Java 中表示为 `java.sql.Clob`,而在 Oracle 中则使用 `oracle.sql.CLOB`。 #### 3. 存储 CLOB 数据 接下来介绍如何通过 Hibernate 将 CLOB 数据保存到 Oracle 数据库中。 **...

    Oracle bolb转换Base64 CLOB.txt

    Oracle slq bolb转换Base64 CLOB

    iBATIS操作Oracle CLOB数据

    综上所述,通过iBATIS操作Oracle的CLOB数据,需要对iBATIS的映射文件、类型处理器以及Oracle的CLOB特性有深入理解。在实际开发中,合理配置和使用这些机制,能够有效地管理大量文本数据,同时保持代码的简洁性和可...

    java调用oracle含有clob参数的存储过程.doc

    "Java 调用 Oracle 含有 CLOB 参数的存储过程" Java 调用 Oracle 含有 CLOB 参数的存储过程是一种常用的数据库操作方式,下面是该过程的详细介绍: 1. 连接数据库 在 Java 中连接 Oracle 数据库需要使用 Oracle ...

    weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 类型转换解决办法

    2. **反射调用**:对于 `weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB` 类型的对象,使用 Java 反射机制调用 `getVendorObj()` 方法,该方法返回一个 `oracle.sql.CLOB` 类型的对象。 3. **CLOB 数据读取**:无论是...

    java读取oracle数据库中clob字段.txt

    java读取oracle数据库中clob字段 把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来

    java操作clob

    在 Java 中操作 Oracle 数据库中的 CLOB(Character Large Object)字段是一项常见的任务。CLOB 类型用于存储大量文本数据,如长篇文章或文档。本教程将详细介绍如何在 Java 中使用 JDBC 和 JNDI 连接访问 Oracle ...

Global site tag (gtag.js) - Google Analytics