2011-10-10 3 views
12

Làm cách nào để thực thi SQL trong tác vụ Gradle?Thực hiện SQL trong tác vụ 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 
    } 
} 

tôi nhận được một java.lang.ClassNotFoundException: org.postgresql.Driver ngoại lệ khi thực hiện nhiệm vụ sql.

+1

Xem http://stackoverflow.com/questions/6329872/how-to-add-external-jar- tập tin-to-gradle-build-script cho một ví dụ với MySql. – thoredge

+0

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

Trả lời

16

Để tự định nghĩa external dependencies for the build script, bạn phải đặt nó vào đường dẫn lớp của tập lệnh xây dựng. Bạn có thể làm điều đó bằng cách xác định nó trong phạm vi đóng cửa buildscript.

buildscript { 
    repositories { 
     mavenCentral() 
    } 

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

Nếu bạn không nhớ tùy thuộc vào công cụ khác, bạn có thể tận dụng dbdeploy trong dự án của mình. Ngoài ra còn có một số gradle plugin cho phép bạn nhập các tập lệnh SQL .

-1

Dưới đây là một cách:

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

Hoặc:

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