`
hong_1121
  • 浏览: 53776 次
  • 来自: ...
社区版块
存档分类
最新评论

String 转oracle.sql.CLOB

    博客分类:
  • JAVA
阅读更多

前两天遇害到一个问题就是需要处理一字符型变量(该变量要作为参数传入存储过程执行),但其长度超长(长度小于32767时正常,大于时就报错)。后来想了很多的解决方案,最后决定先将其转换成CLOB,然后再将其以CLOB的方式传进去。

       是如何转换的呢?经过狂搜GOOGLE,BAIDU,并且不停地测试后,终于成功了。我现将其转换代码贴出来,为大家共享,以便后来人和我一样,为其苦闷不已(就为这,我可是花了一整天的时间)

oracle.sql.CLOB clob = oracle.sql.CLOB.createTemporary(
     conn, false,
     oracle.sql.CLOB.DURATION_SESSION);
   clob.open(oracle.sql.CLOB.MODE_READWRITE);
   writer = clob.getCharacterOutputStream();
   writer.write(parmSql.toCharArray());
   writer.flush();
   writer.close();

 

不要以为这样就行了,其实不然。这个我早就知道,难就难在驱动的问题(不要小看这,这可是个难点,如果你不知道的话,呵呵)。将驱动更换成最新OJDBC14。JAR。这个需要在ORALCE网上去下。

算了还是上传一份吧,现在的懒人也多。

分享到:
评论
1 楼 wx_hello 2011-09-21  
以下是将1,2,3,4,.....转换为name1,name2,name3,name4,.....
自己写了个数据库函数,结果返回值很长,就采用分次返回的代码。。
大大减少了数据库访问量,如果使用clob返回也可以,就是clob用时过多,数据反馈到前台比较慢,下面的代码虽然查最多询了四次数据库,但是比clob省时(我测试过)
String oper_names   = "";
                String temp_str_ids = "";
                String [] operIdArr = issue_obj.split(",");
                //由于数据库返回字符串太长,只有分次提取
                if(issue_obj.length()<=1000){//直接提取
            		oper_names = getOperNameByOperId(issue_obj);
            	}
               	else if(issue_obj.length()>1000){//下面查询大于1000的ID
               		for(int k=0; k<operIdArr.length; k++){
               			temp_str_ids += operIdArr[k]+",";
               			if(temp_str_ids.length()>1100){//满1100先查询
               				oper_names += getOperNameByOperId(temp_str_ids);
               				temp_str_ids = "";//初始化
               			}
                	}
               		//查询剩下的信息
               		oper_names += getOperNameByOperId(temp_str_ids);
               		temp_str_ids = "";//初始化
                }

相关推荐

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

    rtn = clob.getSubString((long) 1, (int) clob.length()); return rtn; } else if ("weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB".equals(in.getClass().getName())) { Method method = in.getClass()....

    ORACLE中CLOB字段转String类型

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

    Oracle.ManagedDataAccess.dll.rar

    Oracle.ManagedDataAccess.dll是Oracle公司为.NET开发者提供的一个托管数据访问组件,它允许C#等.NET语言的应用程序直接与Oracle数据库进行交互,无需依赖传统的Oracle客户端软件。这个RAR压缩包包含了两个不同版本...

    String_clob.zip_oracle

    String content = clob.getSubString(1, (int) clob.length()); ``` 或者,如果需要流式处理大数据,可以使用`Reader`: ```java Reader reader = clob.getCharacterStream(); BufferedReader br = new ...

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

    String content = clob.getSubString(1, (int) clob.length()); } ``` 3. Java调用Oracle存储过程处理输出游标: 存储过程是预编译的SQL语句集合,可以在数据库服务器端执行。在Java中,可以使用`...

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

    pstmt1.setClob(2, oracle.sql.CLOB.empty_lob()); pstmt1.executeUpdate(); // 查询并更新第二条CLOB记录 String sqll2 = "select content from test where id = 2 for update"; ResultSet rss2 = stmt....

    Java存取OracleBlob字段,图片存储,Blob和BLOB的问题,Clob,oracle.docx

    CLOB myClob = (oracle.sql.CLOB) cast2.getTheRealClob(); Writer out = myClob.getCharacterOutputStream(); out.write(content); out.flush(); out.close(); } ``` #### 五、Clob 类型简介 除了 Blob 外...

    oracle数据类型和对应的JDBC类型.pdf

    Oracle 数据类型 CHAR 对应的 JDBC 类型是 java.sql.Types.CHAR,Java 类型是 java.lang.String。VARCHAR2 对应的 JDBC 类型是 java.sql.Types.VARCHAR,Java 类型也是 java.lang.String。LONG 对应的 JDBC 类型是 ...

    Oracle.DataAccess.dll

    2. **全面的数据类型支持**:它支持Oracle的所有数据类型,包括Blob、Clob、BFile、XMLType等复杂类型。 3. **高级特性**:如PL/SQL块、游标、批处理操作、绑定变量和事件处理等。 4. **高级错误处理和诊断**:提供...

    oracle数据类型和对应的JDBC类型.docx

    - `BLOB` 和 `CLOB`:Oracle 中的大对象类型,用于存储大量二进制或字符数据,映射为 `oracle.sql.BLOB` 和 `oracle.sql.CLOB`。 - `ARRAY` 和 `STRUCT`:用于存储数组和结构化数据,映射为 `java.sql.Array` 和 `...

    oracle数据库的clob大字段在jdbc中的处理方式

    Reader reader = clob.getCharacterStream(); BufferedReader br = new BufferedReader(reader); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb....

    jdbc__clob.rar_oracle

    clob.setAsciiStream(1, inputStream, length);` - 从String:`Clob clob = connection.createClob(); clob.setString(1, content);` 4. **读取Clob数据** 当我们需要从数据库读取Clob数据时,可以使用`getClob...

    spring+hibernate操作oracle的clob字段

    在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB字段常被用来存储超过4000字节的信息。Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和...

    java存储oracle中的clob类型

    Reader reader = clob.getCharacterStream(); ``` **2. CLOB的插入与更新** - **插入CLOB数据**: - 使用`empty_clob()`函数分配一个CLOB locator。 - 通过SQL查询获取这个空的CLOB对象。 - 修改CLOB对象的内容...

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

    Reader reader = clob.getCharacterStream(); ``` 3. **读取内容**: 使用`BufferedReader`来逐行读取CLOB中的内容,并将其存储到字符串缓冲区中。这里使用了`BufferedReader`来提高读取效率。 ```java ...

    将长于4000字符的字符串转化为CLOB类型存入数据库

    string sql = "INSERT INTO B_TSBH (BH, MC, SSBXBH, CONTENT) VALUES ('" + strTsbhBH + "', '" + strMC + "', '" + strSsbxbh + "', :clob)"; // 创建OracleConnection对象 using (OracleConnection conn = ...

    hibernate存取oracle的clob

    InputStreamReader reader = new InputStreamReader(clob.getAsciiStream()); BufferedReader bufferedReader = new BufferedReader(reader); String line; StringBuilder sb = new StringBuilder(); while ((line ...

    jdbc 处理clob类型字段

    String sql = "SELECT my_clob_column FROM my_table WHERE id = ?"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); if (rs.next()) { Clob clobData = rs.getClob("my_clob_...

    java读写oracle clob字段

    BufferedReader br = new BufferedReader(clob.getCharacterStream()); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } String ...

Global site tag (gtag.js) - Google Analytics