2016-03-24 19 views
0

Bir MySQL Komut Dosyası var Grails 3.0.9 uygulamasının çalıştığı bir denetleyicide çalıştırmak istiyorum. Benim clear_database.sql dosya nasıl göründüğünüGrails uygulamasında MySQL komut dosyasını çalıştır

import groovy.sql.Sql 
import grails.util.Holders 

    def void clearDatabase() { 
     String sqlFilePath = 'path/to/file/clear_database.sql' 
     String sqlString = new File(sqlFilePath).text 
     def sql = Sql.newInstance(Holders.config.dataSource.url, Holders.config.dataSource.username, Holders.config.dataSource.password, Holders.config.dataSource.driverClassName) 
     sql.execute(sqlString) 
    } 

Thats: hata mesajı Thats

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table_a; 
TRUNCATE table_b; 
TRUNCATE table_c; 
SET FOREIGN_KEY_CHECKS = 1; 

alıyorum:

WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Warning Code: 1064, SQLState: 42000 
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 'TRUNCATE table_a; 

benim MySQL sözdizimi yanlış ya mı ben bu şekilde denedim Başka bir şey mi eksik?

düzenleme: el komut dosyası çalıştırdığınızda çalıştığını

. Yani bence senaryo doğru ama icra ettiğim şekilde değil.

cevap

1

sorun sql.execute(sqlString) bir GString istiyor ve ben normal String yüzden tırnak eklenen tüm işi berbat oldu ve sonuç açıklandığı here gibi yanlış bir MySQL sözdizimi oldu.

Yani benim için işler:

def sql = Sql.newInstance(Holders.config.dataSource.url, Holders.config.dataSource.username, Holders.config.dataSource.password, Holders.config.dataSource.driverClassName) 
    sql.execute "SET FOREIGN_KEY_CHECKS = 0;" 
    sql.execute "truncate ${Sql.expand("table_a")}" 
    sql.execute "truncate ${Sql.expand("table_b")}" 
    sql.execute "truncate ${Sql.expand("table_c")}" 
    sql.execute "SET FOREIGN_KEY_CHECKS = 1;" 

artık gerekli hiçbir clear_database.sql dosyası yok.

0

emin değil ama deneyebilirsiniz: senin clear_database.sql

SET FOREIGN_KEY_CHECKS = 0; 
    TRUNCATE TABLE table_a; 
    TRUNCATE TABLE table_b; 
    TRUNCATE TABLE table_c; 
    SET FOREIGN_KEY_CHECKS = 1; 

İyi şanslar olarak !!

+0

Bu da çalışmıyor, aynı hatayı al. : / – Peter

İlgili konular