在执行查询带有CLOB列的方法时,报如下异常:
ERROR] 2010-12-08 10:18:41 --记录获取失败
java.lang.NumberFormatException: For input string: "4294967295"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:459)
at java.lang.Integer.parseInt(Integer.java:497)
at oracle.jdbc.driver.OracleResultSetMetaData.getPrecision(OracleResultSetMetaData.java:331)
解决办法:
sun实现的那个CacheRowSet 在操作oracle的blog,clob时有问题
以下是网上找到的
ResultSetMetaData接口方法getPrecision的原型是:
public int getPrecision(int column) throws SQLException;
可是Oracle的LOB最大长度是4G-1字节,即4294967295字节,已经超出int类型的范围,所以getPrecision方法会出现异常“NumberFormatException”。对于LOB长度是2G-1字节的sql server等数据库,不存在这个问题。这也可以说是sun错误的限制了LOB列的长度必须小于2G。
解决方案是用oracle自己的CachedRowSet代替sun的CachedRowSet。
如何用oracle的CachedRowSet呢,在ojdbc14.jar包中,可以调用此对象。下载最新的ojdbc解决
分享到:
相关推荐
InputStream input = clob.getAsciiStream(); int len = (int) clob.length(); byte[] by = new byte[len]; int i; while (-1 != (i = input.read(by, 0, by.length))) { input.read(by, 0, i); } rtn = new...
Hibernate 是一个流行的 Java ORM(对象关系映射)框架,它允许开发者将Java类与数据库表进行映射,简化了数据库操作。在Hibernate中,为了能够将Java对象的数据持久化到数据库中,需要对Java类型和SQL类型进行映射...
- `CHAR`: 固定长度的字符串,Java 中使用 `java.lang.String`。 - `DATE`: 存储日期和时间,Java 中对应 `java.sql.Date`。 - `DECIMAL`、`DOUBLE`、`DOUBLE PRECISION`: 存储浮点数,Java 中使用 `java.lang....
标题"Clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle"暗示了这个压缩包包含的资源是关于使用Java操作Oracle数据库中的CLOB和BLOB字段的示例代码。这个压缩包可能包含了一个名为`clob-blob.java`...
clob.setString(1, "affffffffffdfdfdfdddddddfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); String sql1 = "update test set content = ? where id = 2"; PreparedStatement pstmt = ...
Oracle JDBC驱动程序是Java应用程序与Oracle数据库之间通信的桥梁,ojdbc-12.2.0.1.rar是一个包含Oracle JDBC驱动的压缩包,专为Java 8(JDK 8)环境设计。这个版本的驱动支持Oracle数据库的12c版本,提供了高效且...
Reader reader = clob.getCharacterStream(); ``` **2. CLOB的插入与更新** - **插入CLOB数据**: - 使用`empty_clob()`函数分配一个CLOB locator。 - 通过SQL查询获取这个空的CLOB对象。 - 修改CLOB对象的内容...
Oracle数据库中的CLOB(Character Large Object)类型是用来存储大量字符数据的,比如长文本、XML文档等。在Java中,当我们需要通过JDBC(Java ...确保高效、安全地操作这些大字段,可以提高应用程序的性能和用户体验。
String SqlStr = "select Content from TextInfo where TextInfoKey=" + Integer.toString(textinfokey) + " for update"; Statement st = myConn.createStatement(); ResultSet rs = st.executeQuery(SqlStr); ...
- `java.lang.String` 有时用于存储二进制数据(如Base64编码),对应于 SQL 的 `TEXT` 或 `CLOB` 7. **特殊类型**: - `java.io.Serializable` 通常用于存储复杂对象,映射为 `VARBINARY`、`BLOB` - `java.sql....
2. **Text**: 映射到`java.lang.String`,在SQL中对应`CLOB`或`TEXT`类型。 3. **Serializable**: 映射到`Serializable`接口实现类,可以存储在`BLOB`类型中。 4. **Clob**: 映射到`java.sql.Clob`,在SQL中对应`...
查询CLOB字段时,我们可以使用ResultSet的getClob方法获取Clob对象,然后通过getClob.length()或getSubString方法读取数据。例如: ```java String sql = "SELECT my_clob_column FROM my_table WHERE id = ?"; ...
2. 分离大字段:考虑将大字段存储在独立的表中,通过外键关联,减少主表的大小,提高查询效率。 3. 缓存策略:对于不经常变化的大字段,可以利用二级缓存或者第三方缓存系统(如Redis)进行缓存,减少数据库访问。 ...
String content = clob.getSubString(1, (int) clob.length()); } ``` 3. Java调用Oracle存储过程处理输出游标: 存储过程是预编译的SQL语句集合,可以在数据库服务器端执行。在Java中,可以使用`...
detailinfo = clob.getSubString(1, (int) clob.length()); } } // 提交事务 conn.commit(); conn.setAutoCommit(true); } catch (Exception e) { e.printStackTrace(); } return detailinfo; } ``` ##...
null : clob.getSubString(1, (int) clob.length()); } // ... 其他方法,如getNullableResult和getResult(ResultSet rs, int columnIndex) } ``` 这个TypeHandler实现了将String转换为CLOB并插入数据库,...
### ORACLE中CLOB字段转String类型 在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何...
BufferedReader br = new BufferedReader(clob.getCharacterStream()); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } String ...
Reader inStream = clob.getCharacterInputStream(); // 读取 CLOB 数据 int c; while ((c = inStream.read()) != -1) { System.out.print((char) c); } // 关闭输入流 inStream.close(); } ``` 在实际...
1. 创建 ActionForm:定义一个表单类,包含一个类型为 `java.io.File` 的属性来接收上传文件,以及一个类型为 `java.lang.String` 的属性来存储文件名。 2. 配置 struts-config.xml:在 `<form-beans>` 节点下添加...