3
A
回答
0
所有的Java類都是從Groovy中使用。如果Groovy沒有給你一個方法去做,那麼你可以使用JDBC callable statements來實現Java方式。
0
我只是碰到什麼可能是你的問題的解決方案迷迷糊糊的,如果一個例子是,你是什麼之後,看看the reply to this thread
2
我寫了一個幫手,讓我用存儲過程的工作,以與使用groovy.sql.Sql
的查詢類似的方式返回單個ResultSet。這可以很容易地適應處理多個ResultSet(我假設每個都需要它自己的閉包)。
用法:
Sql sql = Sql.newInstance(dataSource)
SqlHelper helper = new SqlHelper(sql);
helper.eachSprocRow('EXEC sp_my_sproc ?, ?, ?', ['a', 'b', 'c']) { row ->
println "foo=${row.foo}, bar=${row.bar}, baz=${row.baz}"
}
代碼:
class SqlHelper {
private Sql sql;
SqlHelper(Sql sql) {
this.sql = sql;
}
public void eachSprocRow(String query, List parameters, Closure closure) {
sql.cacheConnection { Connection con ->
CallableStatement proc = con.prepareCall(query)
try {
parameters.eachWithIndex { param, i ->
proc.setObject(i+1, param)
}
boolean result = proc.execute()
boolean found = false
while (!found) {
if (result) {
ResultSet rs = proc.getResultSet()
ResultSetMetaData md = rs.getMetaData()
int columnCount = md.getColumnCount()
while (rs.next()) {
// use case insensitive map
Map row = new TreeMap(String.CASE_INSENSITIVE_ORDER)
for (int i = 0; i < columnCount; ++ i) {
row[md.getColumnName(i+1)] = rs.getObject(i+1)
}
closure.call(row)
}
found = true;
} else if (proc.getUpdateCount() < 0) {
throw new RuntimeException("Sproc ${query} did not return a result set")
}
result = proc.getMoreResults()
}
} finally {
proc.close()
}
}
}
}
相關問題
- 1. 如何阻止從存儲過程返回結果集?
- 2. Oracle查詢/存儲過程返回多個結果集
- 3. 返回多個結果集的存儲過程
- 4. 存儲過程返回多個結果集
- 5. 從存儲過程返回一個結果集
- 6. WCF從存儲過程返回結果
- 7. 如何獲得從存儲過程的結果集「返回」的行數
- 8. Apache DbUtils:處理從存儲過程返回的多個結果集
- 9. 存儲過程不返回結果
- 10. 返回存儲過程的結果sql
- 11. 在VB從一個存儲過程返回多個數據集
- 12. Oracle存儲過程返回多個結果到.NET
- 13. 從groovy readline返回結果
- 14. mybatis是否支持返回多於1個結果集的存儲過程?
- 15. SQL Server JDBC在調用存儲過程時返回多個結果集
- 16. 從存儲過程得到結果集
- 17. 從存儲過程合併結果集
- 18. 如何返回多個結果集?
- 19. 如何從結果集對象返回多個行發送servlet
- 20. 從多個結果集中返回單個結果集
- 21. 從SQL Server存儲過程獲得空結果存儲過程,返回XML
- 22. 存儲過程是否可以返回結果集?
- 23. 存儲過程結果集與返回值
- 24. MS SQL存儲過程返回的結果集與ODBC
- 25. MySQL - 存儲過程不返回結果集
- 26. Oracle存儲過程返回分頁結果集
- 27. 爲什麼NHibernate需要Oracle存儲過程返回結果集?
- 28. 存儲過程返回多個結果集,但結果集的數量不固定
- 29. 如何將存儲過程的多個結果存儲到數據集中?
- 30. 如果SQL存儲過程正常運行,如何讓SAS返回一個值?