使用 JDBC 从长字符串创建 CLOB

2023-11-25

我有以下查询:

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

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

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);
}

那么这些 clob 当然应该被释放。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JDBC 从长字符串创建 CLOB 的相关文章

随机推荐

  • 使用 Open CV Python 将 Alpha 通道添加到单色图像

    我一直在研究彩色图像 RGB 和带有 alpha 通道 RGBA 的彩色图像 从 RGBA 图像中读取 Alpha 通道非常简单 我什至可以分割图像的 4 个通道 有没有什么方法可以将 Alpha 通道添加到单色或灰度图像 另外 alpha
  • require 未定义 javascript

    编辑 我现在确实意识到了错误 当我测试我的需求时 我正在终端中运行我的脚本 老的 答案可能已经在页面上 但我一直无法找到它 我看到的一般答案是我不能使用 require 客户端 问题是我尝试运行的脚本在我的学校笔记本电脑上完美运行 但它不想
  • PHP随机洗牌数组维护键=>值

    我一直在谷歌上寻找答案 但似乎找不到一些万无一失的东西 而且真的不能把这个搞砸 进入生产站点 我拥有的是具有 20 多个过滤器的高级搜索 它返回一个包含 ID 和距离的数组 我需要做的就是将这些结果打乱 以便每次都以随机顺序显示 我现在出来
  • 应该在电子邮件中使用 PHP_EOL 吗?

    我看到很多 PHP 电子邮件实现都使用 r n 但我也看到其中一些使用 PHP EOL 常量 哪一个更好 谢谢你的帮助都会 如果这是为了终止电子邮件中的行 那么您需要查看的是电子邮件的规范 而不是任何特定平台上使用的规范 电子邮件中的行根据
  • 法拉第超时错误与omniauth(自定义策略)/门卫

    我目前正在关注这个铁路广播公司对于我的具体情况 我在omniauth的回调中遇到了法拉第超时错误 目前 我使用 Rails 应用程序作为 API 并使用骨干网作为 javascript 前端 在同一应用程序上 我决定使用 OAuth 锁定
  • 将 AngularJS html5mode 与 NodeJS 和 Express 结合使用

    我正在使用带有 Express 的 NodeJS 服务器来为我的 AngularJS 应用程序提供服务 当我使用 angularJS 默认路由 hashbangs 时 这一切都工作正常 但现在我正在尝试激活 html5 模式 我正在像这样激
  • Git 修改/重写(不添加/更改文件)

    我经常想编辑提交消息 而不必从上次提交中重新选择文件集 git commit file1 c file2 c 提交消息中的意外拼写错误 git commit file1 c file2 c amend 这可行 但我不想从原始提交中重新选择文
  • 让 cmake 和 home-brew 一起工作

    当我用自制程序 cmake 安装库时似乎找不到它们 对于使用brew安装的任意库 有没有一种简单的方法可以解决这个问题 Default 默认情况下 brew 的库安装到 usr local lib folder gt ls usr loca
  • 启动线程的不同方式有什么区别?

    我有一个名为MyThread它扩展了Thread类并实现了run 函数 当我想运行它时 我有两种方法 新建一个实例并调用该函数 例如 new MyThread start new一个实例并将该实例作为参数传递给Thread的构造函数 然后调
  • Fxxx私有类名前缀约定从何而来?

    在 C C 中 私有类变量的常见约定是m MyPrivateVar 并且我相信 m 代表 我的 我可能是错的 在 Delphi 中 私有类变量以F 例如F手柄等 F 是什么意思 福 有一些命名约定 以免在代码中迷失 这是一个例子来指出为什么
  • 创建独立的 Shiny 应用程序 - Chrome 错误

    我正在尝试按照这篇非常好的博客文章的说明创建一个闪亮的桌面应用程序 http www r bloggers com deploying desktop apps with r 所以基本上我有一个具有以下结构的文件夹 App GoogleCh
  • 如何使用动态 LINQ 求和

    我有以下内容 可以与动态 linq 库 string where Price lt 5 string orderby BookID ASC IQueryable
  • 会话的最佳实践(大猩猩/会话)

    在开始在 golang 中使用会话之前 我需要回答一些问题 会话示例 import github com gorilla sessions var store sessions NewCookieStore byte 33446a9dcf9
  • Android Volley 给我一个 outOfMemory 异常

    我正在使用 volley 从服务器的水平滑动视图中显示图像 但我的图像非常大 这就是我遇到内存不足的异常 下面是我的排球课 public class Volley private RequestQueue mRequestQueue pri
  • RStudio 未检测到 Rtools

    我正在使用最新的 R RStudio 和 Rtools 我已经更新了环境变量 现在我可以从命令行调用 gcc 或 R 当我尝试从 RStudio 发布应用程序时 出现以下错误 准备部署应用程序 完成正在上传捆绑包 应用程序 64015 错误
  • 使用 xmlstarlet 或 xmllint 获取属性值

    自过去两天以来 我已经解决了几个问题 但尚未找到解决方案 这是我的 xml
  • 如何在谷歌colab上安装pydot和graphviz?

    我正在尝试在谷歌合作实验室上绘制我的模型 from keras utils import plot model plot model model to file model png 我得到了这个错误 ImportError Failed t
  • 从非管理应用程序以管理员身份运行进程

    从不以管理员身份运行的应用程序中 我有以下代码 ProcessStartInfo proc new ProcessStartInfo proc WindowStyle ProcessWindowStyle Normal proc FileN
  • AJAX 文件上传后 $_POST 和 $_FILES 为空

    我是网络开发新手 最近遇到的问题是ajax文件上传 现在我有两个 HTML 输入字段 文件输入和按钮
  • 使用 JDBC 从长字符串创建 CLOB

    我有以下查询 select id from table1 where some func 1 where some func是一个允许其参数为 VARCHAR2 或 CLOB 的函数 并且 是一些字符串 可能很长 我正在尝试使用以下代码来绑