List从sql executeInsert返回两组方括号

时间:2015-07-13 10:01:29

标签: sql jdbc groovy

我正在研究一个groovy脚本,该脚本在下一个执行的insert语句中使用sql exceuteInsert的结果。

从executeInsert返回的列表周围有两组squarebrackets,这会导致sql语法错误。我不确定为什么它返回两组括号,如果有一种方法可以删除两者。

我已设法使用联接删除一组括号。我的代码如下:

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错误:由于以下原因导致回退:整数值不正确:[31041]第1行的“ticket_id”列

2 个答案:

答案 0 :(得分:0)

在不知道代码背后的代码或动机的情况下,也没有阅读评论!)我会写这样的东西:

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)

  }

答案 1 :(得分:0)

基于Groovy executeInsert的信息。

我假设:

您的表格票证返回一个自动更新的密钥

列表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)
  }  
}

另请注意,我重新构造了您的SQL字符串,这不仅更紧凑,而且还导致使用bind varibles。生成的SQL类似于

INSERT INTO ticket (name, summary) VALUES (:1,:2) RETURNING  ID INTO :3