使用groovy.sql.sql查询不起作用,但它可以与MySQLWorkbench一起使用

时间:2015-10-12 06:06:49

标签: grails groovy

我正在使用Grails,使用groovy.sql.sql来处理MySQL。

我在我的控制器中查询但是没有用。当我复制我的sql代码以在mySQL Workbench中运行时,它正常工作。

这是我在控制器中的代码,

def createSomething(){
  def sql = new Sql(dataSource)
  def Title = params.playlistName
  def StartDate = params.startDate
  def EndDate = params.endDate

  def map = [title:Title, start:StartDate, end:EndDate]
  sql.execute (
    "START TRANSACTION;"+
    "BEGIN;"+
    "INSERT INTO playlist (`name`) VALUES ('$map.title');"+
    "SELECT playlist.id from playlist where playlist.name =  '$map.title' INTO @playlistId;"+
    "INSERT INTO playlist_has_media(`idMedia`,`order`,`idPlaylist`)VALUES(1,1,@playlistId),(2,2,@playlistId),(3,3,@playlistId);"+
    "INSERT INTO schedule(`name`,`startDate`,`endDate`,`idPlaylist`,`isSync`)VALUES('$map.title', '$map.start', '$map.end', @playlistId, 1);"+
    "COMMIT;"
  )

}

它向我显示错误,但我从打印的sql代码复制到mySQL Workbench运行。它奏效了。

1 个答案:

答案 0 :(得分:0)

尝试删除单引号:

 def createSomething(){
        def sql = new Sql(dataSource)
        def Title = params.playlistName
        def StartDate = params.startDate
        def EndDate = params.endDate

        def map = [title:Title, start:StartDate, end:EndDate]

        sql.execute (
                "START TRANSACTION;"+
                        "BEGIN;"+
                        "INSERT INTO playlist (`name`) VALUES ($map.title);"+
                        "SELECT playlist.id from playlist where playlist.name =  $map.title INTO @playlistId;"+
                        "INSERT INTO playlist_has_media(`idMedia`,`order`,`idPlaylist`)VALUES(1,1,@playlistId),(2,2,@playlistId),(3,3,@playlistId);"+
                        "INSERT INTO schedule(`name`,`startDate`,`endDate`,`idPlaylist`,`isSync`)VALUES($map.title, $map.start, $map.end, @playlistId, 1);"+
                        "COMMIT;"
        )

    }

也许你可以让它更加时髦

sql.withTransaction {stmt ->
    def playlistId = sql.executeInsert("INSERT INTO playlist (`name`) VALUES ($map.title);")
    sql.executeInsert("INSERT INTO playlist_has_media(`idMedia`,`order`,`idPlaylist`)VALUES(1,1,$playlistId),(2,2,$playlistId),(3,3,$playlistId);")
    sql.executeInsert("INSERT INTO schedule(`name`,`startDate`,`endDate`,`idPlaylist`,`isSync`)VALUES($map.title, $map.start, $map.end, $playlistId, 1);")
}