2012-03-14 52 views
1

試圖從Java訪問AS400/DB2存儲過程Spring的JdbcTemplate,試圖從Java訪問AS400/DB2存儲過程Spring的JdbcTemplate

XmlBeanFactory beanFactory2 = new XmlBeanFactory(new ClassPathResource(
       "datasource_as400.xml")); 
     DataSource ds2 = (DataSource) beanFactory2.getBean("dataSource"); 

     jdbc2 = new JdbcTemplate(ds2); 

     jdbc2.update("{CALL TESTONE(?)}", new Object[] { new String("JOHN") }); 

,我收到以下錯誤

[DEBUG,SQLErrorCodeSQLExceptionTranslator] Translating SQLException with SQL state '42704', error code '-204', message [[SQL0204] TESTONE in type *N not found.]; SQL was [{CALL TESTONE(?)}] for task [PreparedStatementCallback] 
[FATAL,MainBatch] processDonations(): org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [{CALL TESTONE(?)}]; nested exception is java.sql.SQLException: [SQL0204] TESTONE in type *N not found. 

回答

3

根據iSeries Info Center,SQLCODE -204表示An undefined object or constraint name was detected.

您可能必須指定模式功能在(I.E.,CALL YOUR_SCHEMA.TESTONE(?))。

如果它在另一個程序中工作(或手動查詢時),您的架構路徑可能會設置不同。你可以通過做SELECT CURRENT_SCHEMA FROM SYSIBM.SYSDUMMY1來檢查(我不知道SYSIBM.SYSDUMMY1是否在iSeries上,或者是否有另一個虛擬表的名字......我習慣z/OS或Linux/Unix/Windows DB2)。

+0

我試圖添加架構,但它沒有幫助 – SJS 2012-03-14 19:08:44

+0

另一個想法可能是您的過程期望某種數據類型進來,而Spring將它作爲另一種類型發送?在這種情況下,您可以將「CAST(?AS型)」添加到您的參數中。有時DB2可能會對過程中的數據類型挑剔。 – bhamby 2012-03-14 20:51:21

+0

謝謝galador我們也試過,:( – SJS 2012-03-15 13:59:02