2011-10-10 139 views
12

如何在Gradle任務中執行SQL?在Gradle任務中執行SQL?

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 
    } 
} 

我得到一個 拋出java.lang.ClassNotFoundException:org.postgresql.Driver執行SQL任務時例外。

+1

見http://stackoverflow.com/questions/6329872/how-to-add-external-jar-文件到gradle-build-script用MySql作爲例子。 – thoredge

+0

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

回答

16

要定義external dependencies for the build script本身,你必須把它放到構建腳本的類路徑中。你可以通過在buildscript關閉中定義它來做到這一點。

buildscript { 
    repositories { 
     mavenCentral() 
    } 

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

這裏有一種方法:

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

或者:

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