从sql executeInsert返回的列表带有两组方括号
我正在编写一个groovy脚本,它在执行的下一个insert语句中使用sql exceuteInsert的结果 从executeInsert返回的列表周围有两组方括号,这会导致sql语法错误。我不确定它为什么会带着两组括号返回,以及是否有办法同时移除这两组括号 我已经使用连接成功地删除了一组括号。我的代码如下:从sql executeInsert返回的列表带有两组方括号,sql,jdbc,groovy,Sql,Jdbc,Groovy,我正在编写一个groovy脚本,它在执行的下一个insert语句中使用sql exceuteInsert的结果 从executeInsert返回的列表周围有两组方括号,这会导致sql语法错误。我不确定它为什么会带着两组括号返回,以及是否有办法同时移除这两组括号 我已经使用连接成功地删除了一组括号。我的代码如下: db.withTransaction { def ticketResultList parsedTicketData.each { ticket ->
db.withTransaction {
def ticketResultList
parsedTicketData.each { ticket ->
String ticketQuery = "INSERT INTO ticket" + "(name, summary) VALUES" + "('${ticket.name}','${ticket.summary}')"
def ticketResult = db.executeInsert(ticketQuery)
ticketResultList = ticketResult.join(",")
}
parsedStatusData.each { status ->
String ticketStatusQuery = "INSERT INTO ticket_status" + "(status, status_date, ticket_id, version) VALUES" + "('${status.status}','${status.statusDate}', ${ticketResultList}, 1)"
db.executeInsert(ticketStatusQuery)
}
以下是接收到的sql错误:回滚原因:第1行“ticket\u id”列的整数值不正确:[31041],不知道代码背后的代码或动机/也不阅读注释!)我会这样写:
db.withTransaction {
def ticketResultList = []
parsedTicketData.each { ticket ->
def ticketQuery = "INSERT INTO ticket" + "(name, summary) VALUES" + "('${ticket.name}','${ticket.summary}')"
def ticketResult = db.executeInsert(ticketQuery)
ticketResultList << ticketResult
}
parsedStatusData.each { status ->
def ticketStatusQuery = "INSERT INTO ticket_status" + "(status, status_date, ticket_id, version) VALUES" + "('${status.status}','${status.statusDate}', ${ticketResultList.flatten().join(',')}, 1)"
db.executeInsert(ticketStatusQuery)
}
db.withTransaction{
def ticketResultList=[]
parsedTicketData.each{ticket->
def ticketQuery=“插入票证”+(名称,摘要)值“+”(${ticket.name},${ticket.summary}”)
def ticketResult=db.executeInsert(ticketQuery)
票务结果列表
def ticketStatusQuery=“插入到票证状态”+(状态、状态、日期、票证id、版本)值“+”(${status.status}、${status.statusDate}、${ticketResultList.flatte().join(',')},1)”
db.executeInsert(ticketStatusQuery)
}
基于来自的信息
我假设:
您的表票证返回一个自动生成的密钥
parsedStatusData和parsedTicketData列表具有相同的长度,并且在相同的位置上具有相应的条目
db.withTransaction {
parsedTicketData.each { ticket ->
def INS1 = "INSERT INTO ticket (name, summary) VALUES (${ticket.name},${ticket.summary})"
def ticketResult = db.executeInsert(INS1)
ticketResultList << ticketResult[0][0] /* get the 1st returned value */
}
parsedStatusData.eachWithIndex { status, i ->
def INS2 = """INSERT INTO ticket_status (status, status_date, ticket_id, version)
VALUES (${status.status},${status.statusDate}, ${ticketResultList[i]}, 1)"""
db.executeInsert(INS2)
}
}
您正在分析ticketResultList本身,因此它被方括号包围,请尝试访问列表中的一个项目。感谢您的评论,这是否像在insert中迭代列表一样:${it.ticketResultList}我尝试了以下操作,但它仍然会在列表项周围产生方括号:ticketResultList.each{result->parsedstatudata.each{status->String ticketStatusQuery=“INSERT INTO ticket_status”+(status,status_date,ticket_id,version)value“+”(${status.status},${status.statusDate,${result},1)”db.executeInsert(ticketStatusQuery)}}为什么要通过添加字符串来构建语句?看起来您更改了正在迭代的集合。我建议使用List::pop()或任何其他方法来获取列表中所需的特定项。
INSERT INTO ticket (name, summary) VALUES (:1,:2) RETURNING ID INTO :3