我从我的Groovy代码调用存储过程。存储的proc看起来像这样
SELECT * FROM blahblahblah
SELECT * FROM suchAndsuch
基本上,两个SELECT
语句,因此两个ResultSets
。
sql.eachRow("dbo.testing 'param1'"){ rs ->
println rs
}
这适用于单个ResultSet。如何获得第二个(或者任意数量的ResultSet)。
答案 0 :(得分:3)
您需要callWithAllRows()
或其变体。
此方法的返回类型为List<List<GroovyRowResult>>
。
调用同时使用两个输出的存储过程时使用此选项 参数并返回多个ResultSet。
答案 1 :(得分:1)
这个问题有点陈旧,但我会回答,因为我最近遇到了相同的要求,这对我和其他人的未来参考可能有用。
我正在使用SphinxSearch处理Spring应用程序。当您在sphinx中运行查询时,您将获得结果,您需要运行第二个查询以获取记录数量的元数据等...
// the query
String query = """
SELECT * FROM INDEX_NAME WHERE MATCH('SEARCHTERM')
LIMIT 0,25 OPTION MAX_MATCHES=25;
SHOW META LIKE 'total_found';
"""
// create an instance of our groovy sql (sphinx doesn't use a username or password, jdbc url is all we need)
// connection can be created from java, don't have to use groovy for it
Sql sql = Sql.newInstance('jdbc:mysql://127.0.0.1:9306/?characterEncoding=utf8&maxAllowedPacket=512000&allowMultiQueries=true','sphinx','sphinx123','com.mysql.jdbc.Driver')
// create a prepared statement so we can execute multiple resultsets
PreparedStatement ps = sql.getConnection().prepareStatement(query)
// execute the prepared statement
ps.execute()
// get the first result set and pass to GroovyResultSetExtension
GroovyResultSetExtension rs1 = new GroovyResultSetExtension(ps.getResultSet())
rs1.eachRow {
println it
}
// call getMoreResults on the prepared statement to activate the 2nd set of results
ps.getMoreResults()
// get the second result set and pass to GroovyResultSetExtension
GroovyResultSetExtension rs2 = new GroovyResultSetExtension(ps.getResultSet())
rs2.eachRow {
println it
}
只是一些测试代码,这需要一些改进。您可以循环结果集并执行任何处理...
评论应该是不言自明的,希望将来能帮助别人!