【问题标题】:Postgresql Procedure not getting called from JDBC没有从 JDBC 调用 Postgresql 过程
【发布时间】:2013-10-16 10:27:46
【问题描述】:

我正在使用 postgresql 过程并尝试从我的 JDBC 程序中调用一个过程。但是,即使我交叉检查并验证了过程名称是否正确,运行时异常也会说过程不存在。 这就是我正在做的事情

 CallableStatement   cs = connection.prepareCall("{call proc1()}");
 cs.executeUpdate();

这是我的 proc1 程序

   create or replace procedure proc1()
as

begin

insert into employee_info values(1,'johnny','1111',43);
-----

end

输出是这样的

   Connection Failed! ERROR: function proc1() does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.

我不明白为什么它不工作即使 proc1() 存在于数据库中。 我应该投射什么?

【问题讨论】:

  • Postgres 中没有create or replace procedure
  • 哦。是吗?那我应该如何创建程序。其实我熟悉mysql、oracle等数据库。我是 postgres 的新手。你能给我一个很好的链接来解释 postgresql 过程
  • @a_horse_with_no_name 否。当我在数据库中手动执行该过程时,该过程运行良好。所以过程语法没有错。
  • 那你没有使用 Postgres。 Postgres 没有过程,只有函数,因此它只有一个create or replace function 语句。
  • create procedurePostgresPlus 接受的语法,这是一个旨在兼容 oracle 的 postgres 分支。

标签: java postgresql jdbc postgresql-9.1


【解决方案1】:

将正确的模式名称添加到可调用语句中,它应该可以工作。请参考下面的代码示例。

CallableStatement   cs = connection.prepareCall("{call yoursSchema.proc1()}");

【讨论】:

    【解决方案2】:

    终于,我得到了解决方案。主要问题是我从官方website 下载的 JDBC 驱动程序。我正在使用 PostgreSQL 驱动程序。我不知道它有什么问题,但它似乎不支持程序。所以我切换到 EnterpriseDB(EDB) 驱动程序。现在同样的程序工作正常,程序正在执行。

    我刚刚进行了这些更改 1)更换驱动程序 2) 将驱动程序类 url 从 "org.postgresql.Driver" 更改为 "com.edb.Driver" 3)数据库网址"jdbc:postgresql://host:port/db"jdbc:edb://host:port/db"

    就是这样。现在程序也正常了。

    【讨论】:

    • 虽然这可能绕过了您的问题,但这个答案并不正确。 PostgreSQL 的“标准”JDBC 驱动程序非常好地支持过程。在jOOQ 中,我们已经为 PostgreSQL 运行集成测试已有很长时间了。我相信这可能是因为您的“程序”是通过 PostgresPlus 创建的?如果您仍然知道真正的问题是什么,那么获得更新的答案会很棒。
    猜你喜欢
    • 2016-06-20
    • 2014-11-24
    • 2020-06-21
    • 2016-01-05
    • 2012-06-10
    • 2011-05-21
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多