簡體   English   中英

SqLite和Gradle

[英]SqLite & Gradle

我在build.gradle中添加了SQLite:

dependencies {
        compile 'org.xerial:sqlite-jdbc:3.8.9.1'
    }

buildscript {
    repositories {
        jcenter()
        mavenCentral()      
    }
    dependencies {
        classpath 'org.xerial:sqlite-jdbc:3.8.9.1'
    }
}

一旦我想用代碼連接到SQLite DB:

 groovy.sql.Sql.newInstance(dbLocation, "org.sqlite.JDBC")

它抱怨:

java.lang.ClassNotFoundException: org.sqlite.JDBC

是什么原因? 我該如何解決?

問題是您需要將JDBC驅動程序放入根類加載器中,而不是僅位於通用類路徑上。

您有幾種選擇。 其中之一是使用您自己的configuration ,然后通過GroovyObject操作根類加載器:

import groovy.sql.Sql

configurations {
    sqllite
}

repositories {
    mavenCentral()
}

dependencies {
    sqllite 'org.xerial:sqlite-jdbc:3.8.9.1'
}

URLClassLoader loader = GroovyObject.class.classLoader
configurations.sqllite.each { File file ->
    loader.addURL(file.toURL())
}

Sql sql = Sql.newInstance('jdbc:sqlite:test.db', "org.sqlite.JDBC")

task checkSql << {
    sql.execute 'CREATE TABLE TIM(name CHAR(50))'
    sql.eachRow('SELECT * FROM sqlite_master') { row ->
        logger.lifecycle row.toString()
    }
}

然后運行gradle checkSql應導致:

$ gradle checkSql
:checkSql
[type:table, name:TIM, tbl_name:TIM, rootpage:2, sql:CREATE TABLE TIM(name CHAR(50))]

BUILD SUCCESSFUL

Total time: 4.374 secs

至少在Gradle 2.9中有

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM