2014-02-12 3 views
9
def db = [ 
    moduleGroup: 'mysql', 
    moduleName: 'mysql-connector-java', 
    moduleVersion: '5.1.18', 
    driver: "com.mysql.jdbc.Driver", 
    url: 'jdbc:mysql://localhost:3306/bham', 
    user: mySqlUser, 
    password: mySqlPassword 
] 

configurations { 
    sql 
}  


task connect << { 

     // This is needed to get mySql driver onto the Groovy/Gradle classpath 
     configurations.sql.each { file -> 
      println "Adding URL: $file" 
      gradle.class.classLoader.addURL(file.toURI().toURL()) 
     } 

     def sql = groovy.sql.Sql.newInstance(db.url, db.user, db.password, db.driver) 

     sql.execute("actStatusCodeLkp.sql") 
     String sqlFilePath = "src/main/resources/sqlscripts/actStatusCodeLkp.sql" 
     String sqlString = new File(sqlFilePath).text 
     sql.execute(sqlString) 

     sql.close() 

    } 

actStatusCodeLkp.sqlВыполнение Sql файл сценария в Groovy/Gradle

insert into act_status_code (id, code, display_name, code_system_name, code_system) values (1, 'active', 'active', 'ActStatus', '2.16.840.1.113883.5.14'); 
insert into act_status_code (id, code, display_name, code_system_name, code_system) values (2, 'cancelled', 'cancelled', 'ActStatus', '2.16.840.1.113883.5.14'); 
insert into act_status_code (id, code, display_name, code_system_name, code_system) values (3, 'aborted', 'aborted', 'ActStatus', '2.16.840.1.113883.5.14'); 
insert into act_status_code (id, code, display_name, code_system_name, code_system) values (4, 'completed', 'completed', 'ActStatus', '2.16.840.1.113883.5.14'); 

кажется, что sql.execute команда не разметить файл в 4 различных утверждений вставки и броски.

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'insert into act_status_code (id, code, display_name, code_system_name, code_syst' at line 2 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 

Это работает, если я просто держать одну вставку заявление в файле. Какая чистая работа здесь, на самом деле не нашла ничего относительно этого онлайн. Кроме того, при использовании maven я могу запустить тот же файл sql, используя sql-maven-plugin.

+1

Вы не можете выполнять операторы многострочные с классом Sql , У вас может быть больше успеха с чем-то вроде этого? http://blog.codeborne.com/2012/09/using-dbdeploy-in-gradle.html –

+1

Вы также можете вызвать readLines в файле, который получит список, а затем каждый() в этом списке и вызовет sql. executeInsert с линией. Это может помочь. – mikemil

+0

После выполнения некоторых исследований, которые я определил для MySql, мне нужно указать 'allowMultiQueries: 'true''. Он работает как прелесть, но если у меня есть какие-либо комментарии в моем файле, такие как '--insert into ..', он терпит неудачу по той же причине, я думаю, должен быть способ избежать прокомментированных строк? –

ответ

5

Что-то подобное мне помогло. Обратите внимание, получение allowMultiQueries: «истина» в свойствах

def props = [user: grailsApplication.config.dataSource.username, password: grailsApplication.config.dataSource.password, allowMultiQueries: 'true'] as Properties 
    def url = grailsApplication.config.dataSource.url 
    def driver = grailsApplication.config.dataSource.driverClassName 


    def sql = Sql.newInstance(url, props, driver) 
0

Вы также могли бы изменить свой SQL, чтобы сделать заявление один запрос по:

insert into act_status_code (id, code, display_name, code_system_name, code_system) values 
(1, 'active', 'active', 'ActStatus', '2.16.840.1.113883.5.14'), 
(2, 'cancelled', 'cancelled', 'ActStatus', '2.16.840.1.113883.5.14'), 
(3, 'aborted', 'aborted', 'ActStatus', '2.16.840.1.113883.5.14'), 
(4, 'completed', 'completed', 'ActStatus', '2.16.840.1.113883.5.14'); 
Смежные вопросы