Sybase IN 和 OUT 参数

2023-12-29

我对 Sybase JDBC 驱动程序如何处理混合存储过程感到非常着迷。IN and OUT参数。查看这个简单的存储过程:

CREATE OR REPLACE PROCEDURE p (IN i1 INT, OUT o1 INT, IN i2 INT, OUT o2 INT)
BEGIN
    set o1 = i1;
    set o2 = i2;
END

以下是我使用 JDBC 的调用方式:

CallableStatement c = connection.prepareCall("{ call dba.p(?, ?, ?, ?) }");
c.setInt(1, 1);
c.setInt(3, 2);
c.registerOutParameter(2, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(2));
System.out.println(c.getObject(4));

但这导致

1
null

这是怎么回事??这是 JDBC 驱动程序中的一个非常邪恶的错误还是我完全错过了一些东西?通过反复试验,我发现这是一种工作方式:

c.setInt(1, 1);
c.setInt(2, 2);
c.registerOutParameter(3, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(3));
System.out.println(c.getObject(4));

现在的结果是

1
2

JDBC驱动是否偷偷重新排序IN and OUT参数??

我正在使用 SQL Anywhere 12 和 jconn3.jar


看起来像是驱动程序中的错误。

我怀疑有缺陷的驱动程序希望参数按顺序传递/注册(即 1,2,3,4)。当您执行 registerOut(2) 时,该语句显然会忘记您执行了 set(3) :-)

或者,可能是,所有 OUT 都应该在所有 IN 之后完成。话又说回来,这是驱动程序中的一个错误。

UPDATE

等等,你没有改变第二个变体的程序吗?这个结果并没有使any感觉。除非,正如你所说,驱动程序重新排序。这是unusual, 至少可以说。

UPDATE 2

我已经反编译了驱动程序。它围绕参数做了一些非常有趣的游戏,随着所有这些变化,我觉得它们很有可能出现错误,但到目前为止我还没有清楚地看到它。

我注意到的唯一有趣的事情是,显然如果位置n处的参数没有出来,驱动程序将向前扫描参数,直到找到该值;如果未找到值,则转到下一行:

  s.registerOutParameter(5,Types.INT);
  ...
  // no out value at position 4, it will go to 5 and get the value
  rs.getInteger(4);

UPDATE 3

查看示例 1 中所有 4 个参数的输出可能会很有趣,即:

CallableStatement c = connection.prepareCall("{ call dba.p(?, ?, ?, ?) }");
c.setInt(1, 1);
c.setInt(3, 2);
c.registerOutParameter(2, Types.INTEGER);
c.registerOutParameter(4, Types.INTEGER);
c.execute();
System.out.println(c.getObject(1));
System.out.println(c.getObject(2));
System.out.println(c.getObject(3));
System.out.println(c.getObject(4));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sybase IN 和 OUT 参数 的相关文章

  • 使用java将数据插入mySQL表

    I have a predefined table in a mySQL database 我正在努力将从用户输入的数据保存到数据库中 但我似乎无法将任何数据保存在数据库中 使用以下代码 我尝试更新数据库的第一行 ID 1 到 OTHER
  • 如何使用 JDBC 将大型(或至少是重要的)BLOB 放入 Oracle 中?

    我正在开发一个应用程序来执行一些批处理 并且希望将输入和输出数据作为文件存储在 Oracle 数据库的 BLOB 字段中 Oracle版本是10g r2 使用如下的PreparedStatement setBinaryStream 方法会将
  • oracle 计算两个字符串中连续匹配的单词

    我想要一个返回两个字符串中单词的顺序匹配数的查询 例子 Table Id column1 column2 result 1 foo bar live foo bar 2 2 foo live tele foo tele 1 3 bar fo
  • Tomcat 连接池与准备好的语句缓存

    从 DBCP 连接池升级到 Tomcat 自己的实现 基于优秀的比较here http tomcat apache org tomcat 7 0 doc jdbc pool html Introduction 我有点困惑为什么他们放弃了这两
  • OutputStream 到 DB2 数据库表的 BLOB 列

    在 DB2 数据库中 我有下表 CREATE TABLE MyTestTable MYPATH VARCHAR 512 NOT NULL MYDATA BLOB CONSTRAINT MYTESTTABLE PK PRIMARY KEY M
  • 声纳+MS SQL数据库

    我正在尝试使用 mssql 服务器数据库初始化声纳 但我不能 使用 Microsoft SQL Server Management Studio 我创建了用户名 sonar 和密码 sonar 的用户 并向同时创建的 sonar 数据库授予
  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 使用 jdbc 程序连接到 Open Office odb 文件

    我编写了以下代码来连接到 OpenOffice db String db C Documents and Settings hkonakanchi Desktop Test odb Class forName org hsqldb jdbc
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 用Java将图像添加到数据库

    我正在尝试将图像添加到 mysql 数据库中的 BLOB 字段 图像大小将小于 100kb 但是我遇到了问题 想知道将这些数据添加到数据库的更好方法是什么 com mysql jdbc MysqlDataTruncation 数据截断 第
  • Android 中的 JDBC 连接

    有没有人在 android 中尝试过 JDBC 连接 因为在 Android 2 3 中支持 JDBC 我必须在没有 Web 服务的情况下连接 Mysql 我已经提出申请 但它给了我错误 public class MysqlConnect
  • 获取jdbc中表依赖顺序

    我在 MySQL 数据库中有一组表 A B C D 依赖关系如下 B gt C gt A 和 D gt A 也就是说 A 有一个 PrimaryKey C 有一个外键指向 A 的主键 B 有一个外键指向 C 的主键 类似地 D 有一个外键指
  • 使用 JPype - 如何访问 JDBC 元数据函数

    我在用着杰 德贝API https launchpad net jaydebeapi它使用 JPype 加载 FileMaker 的 JDBC 驱动程序并提取数据 但我也希望能够获取所有表的列表在数据库中 In the JDBC 文档 ht
  • 可以有多个用户作为 MySQL 存储过程的定义者吗?

    我在 MySQL 存储过程方面遇到了一些困难 并且感到有点沮丧 我有一组由 Bob 创建的 SP 由于他是定义者 只有他才能看到它们的 CREATE 语句 修改它们等 Mary 可以在 MySQL Workbench 的架构中看到 Bob
  • 将程序存储在 phpMyAdmin 中

    我必须将存储过程添加到 MySQL 数据库 问题是托管提供php我的管理员来管理数据库 我在网上搜索了一下 想法是运行创建程序的MySQL本机语句 但由于程序的代码通常可能有 我们必须更改 MySQL 中的分隔符 php我的管理员没有这个选
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 仅具有存储过程的实体框架

    我对在我们的场景中仅使用实体框架与存储过程的合理性有疑问 我们计划拥有一个 N 层架构 包括 UI BusinessLayer BLL DataAccessLayer DAL 和 BusinessObjectDefinitions BOD
  • Dapper 或 MySql 未找到包含句号“.”的存储过程。

    我有一个简单的 C 控制台 它使用 Dapper ORM 调用本地 MySql 数据库 以执行名为的存储过程users UserCreate 但是 当运行查询时 我收到一个异常 在数据库 用户 中找不到过程或函数 UserCreate Bu
  • 我可以使用 Order by 对存储过程结果进行排序吗?

    简单来说 我有这样的SQL语句 EXEC xp cmdshell tasklist 我们可以使用以下命令对结果进行排序或过滤吗order by or where Thanks 我检查了 jamietre 链接 这是完整的答案 Create

随机推荐

  • 使用 ul li 生成 Jquery 多级菜单列表

    images vertical horizontal Jquery UI include quickfox 要处理的数组 我有像上面一样的文件夹结构 它存储在数组目录中 见下文 var dirs images images vertical
  • 如何在Vuejs中处理浏览器后退按钮单击事件

    在 Vue 组件中 我想像这样处理浏览器返回事件 mounted if browser back console log browser back button clicked else console log stay here 为了处理
  • 从 JSON 文件定义 Mongoose 模式

    我想从 JSON 文件定义我的猫鼬架构 这是我的 JSON 文件结构 default item productTitle label Product Title note e g Samsung GALAXY Note 4 type tex
  • Angular.js 观察函数调用的结果

    以下代码片段是否存在任何表面问题 ul class breadcrumb li class active span nbsp a href path dir url dir name a nbsp span class dividier s
  • 如何在 pythonpyder IDE 中使用相对导入

    我有 anaconda python 并正在使用spyder IDE 我试图弄清楚如何在运行底部或 F5 中使用相对导入 假设我有 pkg A foo1 py pkg A foo2 py 并且 foo1 py 有 from import f
  • 如何修复手机上的 Skrollr?

    我遵循移动浏览器支持指南 将内容包装在正文标记之后和之前 解释在这里 https github com Prinzhorn skrollr what you need in order to support mobile browsers
  • PHP Curl 和 setcookie 问题

    我有一个curl 脚本 充当客户端和主服务器之间的代理 field array array Accept gt HTTP ACCEPT Accept Charset gt HTTP ACCEPT CHARSET Accept Encodin
  • 在 Magento ORM 中使用布尔字段

    我正在为我的自定义实体开发后端编辑页面 我几乎一切都正常工作 包括保存一堆不同的文本字段 但是 当尝试设置布尔字段的值时 我遇到了问题 我努力了 landingPage gt setEnabled 1 landingPage gt setE
  • 在域模型之间映射数据的模式

    这是我最近需要做的一件常见的事情 我正在寻找任何常见的模式来使这变得更容易一些 这一切的主要要点是我有一些数据模型 它们被建模来满足 ORM 并纯粹对对象进行 CRUD 操作 这些模型目前通过存储库 工厂公开 取决于其 C 还是 RUD 然
  • Matplotlib动画,移动方块

    我正在从文本文件加载 x y 坐标和偏航角 这些坐标是正方形中间的坐标 yaw 是正方形与 x 轴的角度 在我的文本文件中 坐标正在变化 我想制作一个动画 其中方块将移动 遵循文件中的坐标 并具有精确的偏航角 一个动画刻度应该代表一个方块移
  • 如何禁用一条指令的中断?

    有没有其他方法可以在持续时间内禁用中断只有一条指令 in x86 questions tagged x86比使用CLI操作说明 是的 正在加载SS with a MOV将禁止下一条指令的外部中断 指令集参考是这样说的 使用 MOV 指令加载
  • ODE45 和 Runge-Kutta 方法与解析解的绝对误差比较

    如果有人可以帮助解决以下问题 我将不胜感激 我有以下常微分方程 dr dt 4 exp 0 8 t 0 5 r r 0 2 t 0 1 1 我用两种不同的方式解决了 1 借助于龙格 库塔法 第四阶 并通过ode45在Matlab中 我将这两
  • Oracle:将子查询中的多个结果合并为单个逗号分隔值[重复]

    这个问题在这里已经有答案了 我正在尝试将单列子查询转换为命令分隔的子查询VARCHAR 键入的值列表 这与这个问题 https stackoverflow com questions 111341 combine multiple resu
  • 实体框架自连接[重复]

    这个问题在这里已经有答案了 我使用 Entity Framework 6 和 Code First 并且有一个具有以下结构的表 public class Item Key public int ItemId get set Required
  • VSTS - 在发布期间删除以前的部署

    我正在从事一个 Azure 项目 该项目只能使用 Visual Studio CI 中的 ARM 模板进行部署 并且我们只有对 Azure 门户的读取访问权限 目前我收到以下错误并且无法发布 我也无法从 Portal 中删除部署 因为我只有
  • 使用 PHP 更新 XML 文件

    使用 PHP 更新 XML 标记中的单个属性而不重写和保存文件的最简单方法是什么 有没有办法只使用常规的 DOM 东西来做到这一点 如果您的服务器上有 PHP5 您可以尝试 string
  • 如何将整个Access数据库导出到SQL Server? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我刚刚有了一个可爱的 Access 数据库 所以我想做的第一件事是将其转移到普通的数据库管理系统 sqlexpress 但是唯一的解决
  • 如何在 Visual Studio 中以 NT AUTHORITY\SYSTEM 身份进行调试?

    我正在尝试以 NT AUTHORITY SYSTEM 身份进行调试 我尝试使用以下问题中描述的方法 在 Visual Studio 中调试时以不同用户运行 https stackoverflow com questions 1287099
  • 当我将一个字典分配给另一个变量时,为什么 Python 会更新这两个字典? [复制]

    这个问题在这里已经有答案了 使用词典时如何避免以下情况 a b 1 c a c update b 2 print a b 2 print c b 2 通过使用字典copy 方法 就像这样 gt gt gt a b 1 gt gt gt c
  • Sybase IN 和 OUT 参数

    我对 Sybase JDBC 驱动程序如何处理混合存储过程感到非常着迷 IN and OUT参数 查看这个简单的存储过程 CREATE OR REPLACE PROCEDURE p IN i1 INT OUT o1 INT IN i2 IN