Groovy SQL多个ResultSet

时间:2014-08-19 21:38:13

标签: sql groovy resultset

我从我的Groovy代码调用存储过程。存储的proc看起来像这样

SELECT * FROM blahblahblah

SELECT * FROM suchAndsuch

基本上,两个SELECT语句,因此两个ResultSets

sql.eachRow("dbo.testing 'param1'"){ rs ->
    println rs
}

这适用于单个ResultSet。如何获得第二个(或者任意数量的ResultSet)。

2 个答案:

答案 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
}

只是一些测试代码,这需要一些改进。您可以循环结果集并执行任何处理...

评论应该是不言自明的,希望将来能帮助别人!