这几天在在往数据库里更新一个大字符串,忙了好几天终于试出来一个好方法,现在拿出来分享下:
public class ClobTest {
static String url = "jdbc:oracle:thin:@10.12.10.18:1521:orcl";
static String user = "cwbe1_9999";
static String pwd = "or777";
static String text = "这是要插入到CLOB里面的数据,更新数据!" + "update";
private static int clobImport() throws ClassNotFoundException, SQLException {
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
String sql = "insert into ETLNEEDPARAM(F_KEY,F_VALUE) values ('defaultpo',?)";// 要执行的SQL语句
PreparedStatement stmt = conn.prepareStatement(sql);// 加载SQL语句
// PreparedStatement支持SQL带有问号?,可以动态替换?的内容。
Reader clobReader = new StringReader(text); // 将 text转成流形式
stmt.setCharacterStream(1, clobReader, text.length());// 替换sql语句中的?
int num = stmt.executeUpdate();// 执行SQL
if (num > 0) {
System.out.println("ok");
} else {
System.out.println("NO");
}
stmt.close();
conn.close();
return num;
}
private static int clobUpdate(String key) throws ClassNotFoundException, SQLException {
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
String sql = "update ETLNEEDPARAM set F_VALUE = ? where F_KEY = ? ";// 要执行的SQL语句
PreparedStatement stmt = conn.prepareStatement(sql);// 加载SQL语句
// PreparedStatement支持SQL带有问号?,可以动态替换?的内容。
Reader clobReader = new StringReader(text); // 将 text转成流形式
stmt.setString(2, key);
stmt.setCharacterStream(1, clobReader, text.length());// 替换sql语句中的?
int num = stmt.executeUpdate();// 执行SQL
if (num > 0) {
System.out.println("ok");
} else {
System.out.println("NO");
}
stmt.close();
conn.close();
return num;
}
private static String clobExport() throws ClassNotFoundException, SQLException, IOException {
CLOB clob = null;
String sql = "select F_VALUE from ETLNEEDPARAM where F_KEY ='test1'";
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
String content = "";
if (rs.next()) {
clob = (oracle.sql.CLOB) rs.getClob("F_VALUE"); // 获得CLOB字段str
// 注释: 用 rs.getString("str")无法得到 数据 ,返回的 是 NULL;
content = ClobToString(clob);
}
stmt.close();
conn.close();
return content;
}
// 将字CLOB转成STRING类型
public static String ClobToString(CLOB clob) throws SQLException, IOException {
String reString = "";
Reader is = clob.getCharacterStream();// 得到流
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
StringBuffer sb = new StringBuffer();
// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
while (s != null) {
sb.append(s);
s = br.readLine();
}
reString = sb.toString();
return reString;
}
public static void main(String[] args) throws IOException,ClassNotFoundException, SQLException {
// System.out.println(clobImport());
System.out.println(clobUpdate("fmo"));
System.out.println(clobUpdate("epo"));
// System.out.println(clobExport());
}
分享到:
相关推荐
本文将详细介绍如何在Oracle中实现CLOB字段到字符串类型的转换,并探讨其中的关键技术和注意事项。 #### 一、CLOB概述 1. **定义**: - `CLOB`是Oracle数据库提供的一种特殊的数据类型,用于存储大文本数据。 - ...
下面将详细介绍如何在C#环境下通过Oracle.NET接口实现将长于4000字符的字符串转化为CLOB类型并存入Oracle数据库的过程。 ### 一、CLOB类型的简介 CLOB是Oracle数据库中用于存储大量文本数据的一种数据类型,它可以...
在Java编程中,Oracle的CLOB(Character Large Object)数据类型用于存储大量字符数据,如文本文件、HTML文档等。本教程将介绍如何使用Java来读取和写入Oracle数据库中的CLOB字段。 首先,我们需要引入相关的Java和...
然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...
更理想的解决方案是使用数据库提供的API或者存储过程来处理CLOB数据,通过流(Stream)的方式进行大对象的读写,这样可以避免一次性加载整个字符串到内存,有效防止因字符串过长引发的错误。 例如,你可以使用...
使用`BufferedReader`来逐行读取CLOB中的内容,并将其存储到字符串缓冲区中。这里使用了`BufferedReader`来提高读取效率。 ```java StringBuffer sb = new StringBuffer(); BufferedReader br = new ...
在Oracle数据库中,CLOB类型用于存储最多4GB的非二进制大字符串。处理CLOB时,我们需要注意以下几点: 1. **插入CLOB数据**:在iBATIS的映射文件中,需要使用`<clob>`标签来处理CLOB字段。例如,当向数据库插入CLOB...
CLOB是一种用于存储大量字符数据的数据类型,它可以容纳最大4GB的单个文本对象。在Oracle中,CLOB通常用于存储大段的文本,如文章、报告或者XML文档。 iBATIS是一个Java库,它允许开发者将SQL语句与Java代码分离,...
无论是 `oracle.sql.CLOB` 还是通过 `getVendorObj()` 方法得到的 `oracle.sql.CLOB` 对象,都可以通过 `getAsciiStream()` 和 `getSubString()` 方法来读取 CLOB 的内容,并将其转换为字符串形式。 4. **异常处理*...
示例中给出的是一个名为`P_UTL_HTTP`的存储过程,该过程接受一个字符串参数`AS_STR`,并将此字符串嵌入到SOAP请求中。 ```plsql PROCEDURE P_UTL_HTTP(AS_STR VARCHAR2) IS -- ... ``` ### 步骤二:构建SOAP请求 ...
在Hibernate中,如果Clob字段的值是字符串,可以通过将Clob字段映射为String类型,让Hibernate自动处理转换。这种方式简单易用,但可能不适合非常大的文本,因为可能会导致内存溢出。 3.3 直接使用Clob类型: 对于...
Java 中 XML 文件的处理及 Oracle 中 XMLType 的插入和读取 Java 中 XML 文件的处理是指在 Java 应用程序中处理和操作 XML 文件的过程。在 Oracle 数据库中,XMLType 是一种特殊的数据类型,用于存储和处理 XML ...
与之相对的是,Java中的`String`对象是用于处理字符串的基本类,它是不可变的且适用于较小的数据片段。在Java应用程序与Oracle数据库交互时,通常需要在两者之间进行`String`与CLOB类型的转换。以下是对这个主题的...
5. LONG: 用于存储长字符串,最大长度可达 2GB,但不支持字符串搜索,已被 BLOB、CLOB 和 NCLOB 等大对象类型逐渐取代。 6. RAW(n) 和 LONG RAW: 二进制数据类型,RAW 用于存储较小的二进制文件,最大长度为 2000 ...
在ASP.NET中与Oracle数据库交互时,有时我们需要处理CLOB(Character Large Object)字段,这类字段用于存储大文本或二进制数据。本篇将详细讲解如何在ASP.NET中操作Oracle的CLOB字段。 首先,要进行Oracle数据库...
在Java编程中,调用Oracle数据库的存储过程并传递CLOB(Character Large Object)类型参数是一项常见的任务。CLOB类型用于存储大文本数据,如XML文档、长篇报告或者日志记录。以下是一个详细的步骤解释如何实现这个...
4. 在Hibernate的配置文件中添加"hibernate.connection.SetBigStringTryClob"属性,这对于Oracle数据库是必须的,以确保可以将大字符串存储为Clob类型。 5. 进行存取测试以验证配置的有效性。 传统存储方式则是将...
在IT领域,尤其是在数据库操作与数据管理中,CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型,常用于保存如文章、报告、注释等大文本信息。本文将详细解析CLOB的读写问题,包括其在Oracle...
string conn = "Data Source=客户端指定连接字符串;User ID=user;Password=mima"; OracleConnection Con = new System.Data.OracleClient.OracleConnection(conn); Con.Open(); string cmdText = "INSERT INTO ...
- 使用Blob/Clob接口:直接操作Clob接口进行读写,而不是将其转换为字符串或其他数据类型,以减少转换开销。 通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际...