当前位置: 首页 > 面试题库 >

使用JDBC从长字符串创建CLOB

宁鹏程
2023-03-14
问题内容

我有以下查询:

select id from table1 where some_func(?) = 1;

where some_func是一个允许其参数为VARCHAR2或CLOB的函数,并且?是一些字符串,可能真的很长。

我正在尝试使用以下代码来绑定变量:

stmt.setObject(i+1, obj);

但是如果string.length()> 4000,则会出现以下错误:

java.sql.SQLException: ORA-01460: unimplemented or unreasonable conversion requested

出于明显的原因:VARCHAR2的大小限制为4000个字符。

然后,我尝试使用以下代码:

if(obj instanceof String && ((String) obj).length() >= 4000) {
  String s = (String) obj;
  StringReader stringReader = new StringReader(s);
  stmt.setClob(i+1, stringReader, s.length());
} else {
  stmt.setObject(i+1, obj);
}

这给出了一个不同的错误:

ORA-22922: nonexistent LOB value

我尝试的最后一个想法是使用oracle.sql.CLOB.createTemporary()方法创建CLOB,但由于以下异常而失败:

java.lang.ClassCastException:
  org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
  cannot be cast to oracle.jdbc.OracleConnection

我究竟做错了什么?还有其他可能性吗?


问题答案:

可以通过简单的方式创建CLOB:

if(obj instanceof String && ((String) obj).length() >= 4000) {
    Clob clob = connection.createClob();
    clob.setString(1, (String) obj);
    stmt.setClob(i+1, clob);
}

然后,当然应该释放这些块。



 类似资料:
  • 问题内容: 我有一个字符串形式: 依此类推(长度会有所不同)。由此创建字典的最简单方法是什么? 我知道我可以拆分,但是我无法获得正确的语法。如果我分开,那么我如何将这两个部分结合在一起? 对此进行迭代似乎很痛苦。 问题答案: 编辑:下一个解决方案是当您想要将值作为整数,我认为这是您想要的。

  • 问题内容: 这是一个非常基本的问题。但是我无法在Java文档中找到答案,也无法对其进行测试,因为我不知道这种方法是否存在。 我可能会收到一个URL字符串,可能是 要么 然后我会得到可能以开头的资源路径,或者就像 我正在看课,可以处理第一部分,即获取hostURL使其成为HTTPS或HTTP请求。问题是附加资源路径。我必须手动检查它的第一个字母是否存在。我想知道此功能是否已经在某个类中。 问题答案:

  • 问题内容: 我在存储过程中的MS- SQL中有一个结果集,可以说它有一个VARCHAR列,但有很多行。我想创建一个包含所有这些值的逗号分隔的字符串,是否有一种简单的方法来执行此操作,还是我必须逐步检查每个结果并手动构建字符串? 最好是我想在存储过程本身中执行此操作。 问题答案: 这是一种方法(使用AdventureWorks2008 DB): 这是另一个(从SQL 2005开始): 在这两种情况下

  • 问题内容: 如何使用下面的代码解组XML字符串并将其映射到下面的JAXB对象? 问题答案: 要传递XML内容,您需要将内容包装在中,然后将其解组:

  • 问题内容: 从java中的json字符串创建哈希图? 我有喜欢的json字符串,想要转换为标准的Hashmap。 我该怎么做? 问题答案: 解析JSONObject并创建HashMap 测试输出:

  • 问题内容: 我在PostgreSQL中有一个表,其中包含: 是类型,它包含具有正确顺序的该行的父记录列表。 家长:然后再 如何编写一个查询,该查询对于任何给定的ID都会生成其父母姓名的字符串? 例如: :。 :。 :。 编辑: 如果可能的话,我希望请求的ID总是会出现。 :。 :。 :。 :。 问题答案: 您可以结合使用诸如generate_subscripts和array之类的多项操作来获得结果