2011-10-10 12 views
12

¿Cómo puedo ejecutar SQL en una tarea de Gradle?¿Ejecutar SQL en una tarea de 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 
    } 
} 

me siento un java.lang.ClassNotFoundException: org.postgresql.Driver excepción al ejecutar la tarea SQL.

+1

Ver http://stackoverflow.com/questions/6329872/how-to-add-external-jar- files-to-gradle-build-script para un ejemplo con MySql. – thoredge

+0

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

Respuesta

16

Para definir external dependencies for the build script en sí mismo tienes que ponerlo en el classpath de los scripts de compilación. Puede hacerlo definiéndolo dentro del cierre buildscript.

buildscript { 
    repositories { 
     mavenCentral() 
    } 

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

Si no le importa depender de otra herramienta más, puede aprovechar dbdeploy en su proyecto. También hay un gradle plugin que le permite importar scripts SQL como es.

-1

Aquí es una manera:

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") 
    } 
} 
Cuestiones relacionadas