需要一些帮助来解决这个问题,也许还有更多。我正在尝试从我的 Grails 服务调用 Oracle 11g 中的存储过程。
至今:
import java.sql.*
import groovy.sql.Sql
import oracle.jdbc.driver.OracleTypes
class DummyService {
def dataSource
def serviceMethod() {
}
def listPeople(){
Sql sql = new groovy.sql.Sql(dataSource)
def resultList = []
sql.call("BEGIN mypackage.p_get_people(?); END;",
[Sql.resultSet(OracleTypes.CURSOR)]) {cursorResults ->
if(cursorResults.next()) {
results = cursorResults.getAt(1);
}
}
return resultList
}
好的,所以这会返回第一行数据,并且根据传递给 getAt() 方法的内容,我可以获取该列。我在这里找到了ORACLE STORED PROCS IN GRAILS
我真正想要的是返回结果集并将其放入列表中,我只是不知道该怎么做。
当我尝试{cursorResults -> println cursorResults}
时它会引发错误
Message: org.apache.commons.dbcp.DelegatingCallableStatement with Address: "oracle.jdbc.driver.T4CCallableStatement@...."is closed
直接在 Oracle 中运行此过程,游标中有 457 行,如果这有帮助的话。
编辑 1:对 dmahapatro 的回应,这是 NPE
| Error 2013-05-07 14:16:05,123 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /testapp/messages/list
Stacktrace follows:
Message: null
Line | Method
->> 15 | list in testapp.MessagesController$$EO5AzzAw
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 908 | run . . in ''
^ 662 | run in java.lang.Thread
现在第 15 行很简单 println dummyService.listPeople()