我正在使用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运行。它奏效了。
答案 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);")
}