如何处理 callableStatement.registerOutParameter(1, java.sql.Types.BOOLEAN);

2023-12-05

Oracle 10g/11g 中有一个存储过程,如下所示:

CREATE OR REPLACE 
PROCEDURE SP_SOME_PROC (  PRM_ID IN NUMBER , START_DATE IN DATE,  RESULT OUT BOOLEAN) 
is...

使用以下代码来调用它并获取结果:

String sql = "{call SP_SOME_PROC(?,?,?) }";

callableStatement = conn.prepareCall(sql);
callableStatement.setLong(1, theid);
callableStatement.setDate(2,  new java.sql.Date(startDate.getTime()));
callableStatement.registerOutParameter(3, java.sql.Types.BOOLEAN);

callableStatement.executeUpdate();

Boolean result = callableStatement.getBoolean(3);

然而,上面的代码会产生如下所示的异常

[10/8/13 2:28:24:736 EEST] 0000009a SystemErr     R java.sql.SQLException: Invalid column type: 16
[10/8/13 2:28:24:737 EEST] 0000009a SystemErr     R     at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3950)
[10/8/13 2:28:24:737 EEST] 0000009a SystemErr     R     at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:135)
[10/8/13 2:28:24:737 EEST] 0000009a SystemErr     R     at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:304)
[10/8/13 2:28:24:737 EEST] 0000009a SystemErr     R     at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:393)
[10/8/13 2:28:24:737 EEST] 0000009a SystemErr     R     at oracle.jdbc.driver.OracleCallableStatementWrapper.registerOutParameter(OracleCallableStatementWrapper.java:1569)

我尝试了其他组合,例如

String sql = "{? = call SP_SOME_PROC(?,?) }";
callableStatement = conn.prepareCall(sql);
callableStatement.registerOutParameter(1, OracleTypes.BOOLEAN);

但没有运气!


虽然 Oracle 具有可在存储过程中使用的布尔类型,但它没有可通过 JDBC 接口发送的布尔列类型。您将必须进行一些阻抗匹配(即返回 int 0 和 1 或 char 'T' 和 'F')。

布尔列类型的缺乏是 ANSI 的遗留问题,ANSI 是 Oracle 论坛上许多抱怨和咬牙切齿的根源(在 AskTom 上查找“布尔”)。

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

如何处理 callableStatement.registerOutParameter(1, java.sql.Types.BOOLEAN); 的相关文章

随机推荐

  • 如何使用 Lombok 访问 getter 和 setter 方法? [复制]

    这个问题在这里已经有答案了 我已经在我的项目中添加了 Lombok maven 存储库 并成功使用了 Lombok 注释 我尝试从另一个类访问 setter 和 getter 方法 但无法访问这些方法 我正在使用 spring Boot 版
  • SQL Server - 有没有办法批量解决排序规则冲突

    我们遇到的情况是 开发和生产 SQL Server 之间的数据库 表和某些列的排序规则不同 这对开发造成了严重破坏 事情会在开发上工作 然后由于升级时的排序规则冲突而中断 数据和结构将从产品复制到开发 这又会因为冲突等而破坏开发上的查询 我
  • 执行Python程序

    我已经在网上搜索答案很长一段时间了 但这让我非常头疼 我使用的是 Ubuntu 12 04 我想从终端执行 Python 脚本而不使用完整路径 因此 我通过将以下内容添加到 bashrc 中 将 home kyril python scri
  • 嵌入式 Jetty 找不到带注释的 Servlet

    短的 我有一个提供 war 工件的项目 其中包含带有注释的 servlet 但没有 web xml 如果我尝试在 jetty 中使用 war 我总是只能得到 war 内容的目录列表 而不是 servlet 执行 任何想法 很长的故事 我的
  • SQL 按最近日期选择具有两个唯一列的行

    使用以下查询和结果 我正在查找 ChargeId 和 ChargeType 唯一的最新条目 select chargeId chargeType serviceMonth from invoice CHARGEID CHARGETYPE S
  • Hindley-Milner 的哪一部分是你不明白的?

    I swear曾经有一个T shirt出售带有不朽文字的 哪一部分 do you not理解 就我而言 答案是 全部 特别是 我经常在 Haskell 论文中看到这样的符号 但我不知道它的含义 我不知道它应该是数学的哪个分支 我当然认识希腊
  • 在Interceptor.intercept()内部,我如何知道Action是否已经被执行?

    我正在使用拦截器在基于 Struts 的应用程序中实现一些内容 但我对它们的生命周期如何工作感到困惑 根据 Struts 文档 拦截者 编写拦截器 and 大图景 它应该像这样工作 FirstInterceptor NextIntercep
  • Boost::解析字符串时的精神斗争

    我正在尝试用 Boost Spirit 解析字符串 但我无法让它工作 从今天起我就没有使用 Boost Spirit 的经验了 该字符串由用 分隔的命令组成 命令是 INC 一些整数 BOMB 第一个整数 第二个整数 MOVE 第一个整数
  • Typescript:重写超类方法而不需要知道超类方法签名

    以下是我如何可靠地重写 vanilla JS 中的方法 而不关心名称或参数数量或返回值 import EventEmitter from events console log event arguments every time this
  • 结合使用 Bootstrap for Angular 和 Material design for Angular

    我正在做一个与此相关的项目template 该模板是使用 AngularJs 和 Bootstrap UI 角度引导 编写的 我想包含一些材料设计元素 例如卡片等 可以这样做吗 推荐吗 我的事情是 我们已经喜欢这个模板及其许多元素的方式 但
  • 单引号和双引号一起作为 HTML 属性值?

    我们有这样的代码 echo
  • 输出 JSON 对象中的所有直接邻居

    是否可以在 Cypher 中编写查询以将以下查询的输出格式化为 JSON 对象 MATCH n Artist name Metallica r gt m Album RETURN node n neighbours type r colle
  • 检索 ListView asp.net 中选定单选按钮的值

    我想发送一个 Guid 当用户单击结账时 该 Guid 应作为 eventargs 与每个单选按钮关联 我只用 RadioButtonList 就可以实现此功能 但我不能在这里使用它 因为其余字段是从数据库中提取的 有很多涉及此类主题的问题
  • JavaScript - 在内部函数中引用“this”

    考虑以下代码 MyClass prototype my func function this x 10 ajax success function data alert this x 它不起作用 因为显然this没有绑定到闭包的执行上下文中
  • ORDER BY RAND() 似乎不是随机的

    我有一个相当简单的 SQL MySQL SELECT foo FROM bar ORDER BY rank RAND 我注意到 当我刷新结果时 随机性很弱 目前的样本数据中有六个具有相同排名的结果 整数零 有很多随机性测试 但这里有一个简单
  • 无法从节点模块自动导入反应组件

    我最近开始使用 VS Code 我正在使用带有 React 和 Type 脚本的 Material ui 但我无法使用 alt option Enter 快捷方式导入 Material ui 的组件 我使用的是mac 我使用的typescr
  • Plotly:在箱线图中用样本名称注释异常值

    我正在尝试使用 ggplot 创建箱线图并使用数据集绘制箱线图airquality where Month在 x 轴上并且Ozone值位于 y 轴上 我的目标是注释该图 以便当我将鼠标悬停在离群点上时 它应该显示Sample除臭氧值外的名称
  • 从 Google OpenID 迁移到新的 OAuth 2

    我发现已经有一些关于此的问题 但我发现没有一个涉及任何细节 我之前使用过来自 DotNetOpenAuth 的自己的代码 但现在我决定切换到 Microsoft Wrapper 进行身份验证 无论如何 我发现这个非常好的 OAuth 客户端
  • 如何在 React Router v6 中重定向?

    我正在尝试升级到 React Router v6 react router dom 6 0 1 这是我更新的代码 import BrowserRouter Navigate Route Routes from react router do
  • 如何处理 callableStatement.registerOutParameter(1, java.sql.Types.BOOLEAN);

    Oracle 10g 11g 中有一个存储过程 如下所示 CREATE OR REPLACE PROCEDURE SP SOME PROC PRM ID IN NUMBER START DATE IN DATE RESULT OUT BOO