Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从sql executeInsert返回的列表带有两组方括号_Sql_Jdbc_Groovy - Fatal编程技术网

从sql executeInsert返回的列表带有两组方括号

从sql executeInsert返回的列表带有两组方括号,sql,jdbc,groovy,Sql,Jdbc,Groovy,我正在编写一个groovy脚本,它在执行的下一个insert语句中使用sql exceuteInsert的结果 从executeInsert返回的列表周围有两组方括号,这会导致sql语法错误。我不确定它为什么会带着两组括号返回,以及是否有办法同时移除这两组括号 我已经使用连接成功地删除了一组括号。我的代码如下: db.withTransaction { def ticketResultList parsedTicketData.each { ticket ->

我正在编写一个groovy脚本,它在执行的下一个insert语句中使用sql exceuteInsert的结果

从executeInsert返回的列表周围有两组方括号,这会导致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错误:回滚原因:第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