2013-10-16 24 views
0

我正在使用postgresql過程並嘗試從我的JDBC程序中調用過程。但是,儘管我交叉檢查並驗證過程名稱是正確的,但獲取運行時異常說明過程並不存在。 這是我在做什麼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. 

我不明白爲什麼它不工作eventhough PROC1()存在於數據庫中。 我應該施放什麼?

+0

在Postgres –

+0

沒有'創建或替換程序哦。是嗎?那麼我應該如何創建程序。其實我熟悉mysql,oracle和其他數據庫。我是新來postgres ..你可以指導我一個很好的鏈接,這解釋了postgresql程序 – Stunner

+0

@a_horse_with_no_name否。當我在數據庫中手動執行它時,該過程正常工作。所以程序語法沒有問題。 – Stunner

回答

0

最後,我得到了解決方案。主要問題是我從官方website下載的JDBC驅動程序。我使用的是 postgresql驅動程序。我不知道它有什麼問題,但它似乎不支持proedures。所以我切換到了EnterpriseDB(EDB)驅動程序。現在相同的程序運行正常,程序正在執行。

我只是做了這些改變 1)更改驅動程序 2)更改驅動程序類URL從"org.postgresql.Driver""com.edb.Driver" 3)Dabase網址"jdbc:postgresql://host:port/db"jdbc:edb://host:port/db"

這就是全部。現在程序也起作用。

+1

儘管這可能已經規避了你的問題,但這個答案並不是真的正確。 PostgreSQL的「標準」JDBC驅動程序非常好地支持過程。在[jOOQ](http://www.jooq.org)中,我們已經對PostgreSQL進行了多年的集成測試。這可能是由於您的「程序」是通過PostgresPlus創建的,我相信?如果你仍然知道真正的問題是什麼,那麼有一個更新的答案會很好。 –

2

將正確的模式名稱添加到可調用語句中,它將起作用。例如,請參考下面的代碼。

CallableStatement cs = connection.prepareCall("{call yoursSchema.proc1()}"); 
相關問題