Groovy的SQL提供了一个eachRow()方法,但是如果正在执行的SQL语句没有产生ResultSet,例如,一个SQL语句,它似乎会生成一个无法捕获的错误。当然Groovy SQL也为不产生ResultSet的SQL语句提供了一个execute()方法。我的挑战是,如果SQL语句是由用户提供的,那么我想知道如何知道使用哪个方法?我希望eachRow()在没有ResultSet的情况下抛出一个可以被捕获/吞下的异常,但似乎不是这样。
这里有一个片段展示了我的尝试。在示例中,它从stdin读取SQL语句,并尝试使用eachRow()处理它们。
System.in.readLines().each {
dbsql = it
try {
println "processing sql"
dbconn.eachRow(dbsql) {
n++
}
println "processed result ($n rows)"
} catch(SQLException ex) {
rslt = 2
println ">>> query failed against ${dbhost}/${dbname}:")
println " ${ex}"
} catch(Exception ex) {
rslt = 255
println ">>> general failure"
println " ${ex}"
}
字符串
而不是任何一个catch块执行,我得到的错误消息看起来像,
Dec 01, 2023 12:45:13 AM groovy.sql.Sql eachRow
WARNING: Failed to execute: insert into mytable (name) values ('John Doe'); because: This SQL statement does not return a single ResultSet
>>> query failed against dbhost/wrk:
java.sql.SQLException: This SQL statement does not return a single ResultSet
型
希望有人可以帮助Groovy SQL的使用,在SQL语句是不知道提前,因为在这种情况下,他们来自一个文件。
注意:对于SELECT语句,一切都很顺利(因为它们返回ResultSets)。
1条答案
按热度按时间chhqkbe11#
对于单个resultset或rowcount,groovy代码可以是这样的:
字符串
输出示例:
型
数据库,如微软sql server支持多个结果集,我不知道如何处理他们在groovy。
但是,这里有一个很好的Java示例,可以很容易地移植到groovy:https://learn.microsoft.com/en-us/sql/connect/jdbc/using-multiple-result-sets?view=sql-server-ver16