2011-10-10 8 views
12

Come posso eseguire SQL in un'attività Gradle?Esecuzione di SQL in un'attività Gradle?

configurations { 
    compile 
} 
repositories { 
    mavenCentral() 
} 
dependencies { 
    compile 'postgresql:postgresql:9.0-801.jdbc4' 
} 
task sql << { 
    driverName = 'org.postgresql.Driver' 
    Class.forName(driverName) 
    groovy.sql.Sql sql = Sql.newInstance(
     'jdbc:postgresql://localhost:5432/postgres', 
     'username', 
     'password', 
     driverName 
    ) 
    sql.execute 'create table test (id int not null)' 
    sql.execute 'insert into test (id) values(1)' 
    sql.eachRow 'select * from test' { 
     println it 
    } 
} 

ottengo un java.lang.ClassNotFoundException: org.postgresql.Driver un'eccezione durante l'esecuzione del compito di sql.

+1

Vedi http://stackoverflow.com/questions/6329872/how-to-add-external-jar- files-to-gradle-build-script per un esempio con MySql. – thoredge

+0

http://stackoverflow.com/questions/29010312/gradle-cannot-execute-sql-driver-not-found – yazabara

risposta

16

Per definire external dependencies for the build script è necessario inserirlo nel classpath degli script di build. Puoi farlo definendolo all'interno della chiusura buildscript.

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'postgresql:postgresql:9.0-801.jdbc4' 
    } 
} 
0

Se non ti dispiace seconda un altro strumento, è possibile sfruttare dbdeploy nel progetto. C'è anche un gradle plugin che ti permette di importare gli script SQL così come lo è.

-1

Ecco un modo:

gradle.class.classLoader.addURL(new File('../../../../lib/server/mssql/sqljdbc4.jar').toURI().toURL()) 
def Sql sql = Sql.newInstance(dbConnectionURL, dbUserName, dbPassword, dbDriverName) 
String sqlString = new File(dbSchemaFile as String).text 

sql.execute(sqlString) 
0
buildscript { 
    dependencies { 
     classpath 'com.oracle:ojdbc6:11.2.0.3' 
    } 
} 

task tmp() { 
    dependsOn configurations.batch 
    doLast { 
     ant.sql(classpath: buildscript.configurations.classpath.asPath, 
      driver: "oracle.jdbc.OracleDriver", 
      url: "${dbConn}", userid: "${dbUser}", password: "${dbPass}", 
      "select 1 from dual") 
    } 
} 

alternativa:

ant.sql(classpath: buildscript.configurations.classpath.asPath, 
     driver: "oracle.jdbc.OracleDriver", 
     url: "${dbConn}", userid: "${dbUser}", password: "${dbPass}") { 
    fileset(dir: dir) { 
     include(name: "**/*.sql") 
    } 
} 
Problemi correlati