2017-11-02 9 views
0

ハードコードされたデータがあるのsqliteデータベースにAndroidアプリケーションがあります。 どのように事前に生成データベースファイルのGradleスクリプト例えばSQLコマンドを含むテキストファイル(または2つ目は、アンドロイド固有テーブルandroid_metadataの作成を含むでしょう)?gradleビルドスクリプトでsqliteデータベースを事前に生成する方法

ファイルがアセットフォルダに保存され、アプリケーションの初期化中に適切な(内部データベース)フォルダにコピーされることが期待されます。例えば。ここのように:

How to use my own sqlite database?

または

What is a Full Android Database Helper class for an existing SQLite database?

私は、DBの初期化中にSQLコマンドを実行できることを知っているが、私は同じことを行うには、すべてのデバイスのCPUを気にしたくありませんもの。

+0

開発マシンに 'sqlite3'バイナリをインストールし、それを使ってSQL文を実行してデータベースを作成するためのGradleタスクを書くことができます。あるいは、SQLiteとのインターフェイスをとる普通のJavaライブラリを見つけ、それをカスタムGradleプラグインの一部として使用することもできます。 – CommonsWare

答えて

0

自分でそれを見つける:)

のアプリのbuild.gradleで、[OK]を:

... 
configurations { 
    driver 
} 

dependencies { 
    ... 
    driver 'org.xerial:sqlite-jdbc:3.20.1' 
    ... 
} 

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

task createDB << { 
    ext.loadScript = { sql, file -> 
     println("Applying " + file) 
     String[] sqlcmds = file.text.split(";") 
     sqlcmds.collect{it.trim()}.findAll{!it.isEmpty() && !it.startsWith("--")}.each{ 
      try { 
       sql.execute(it) 
      } catch(java.sql.SQLException e) { 
       System.err << "Invalid SQL statement: " + it 
       e.printStackTrace(System.err) 
       throw.e 
      } 
     } 
    } 

    def sql = groovy.sql.Sql.newInstance('jdbc:sqlite:path/to/asset/folder/dbfile','','','org.sqlite.JDBC') 
    new File("path/to/sql/init/files").eachFileMatch(~/.*\.sql/) {loadScript(sql, it)} 
    sql.close() 
} 
preBuild.dependsOn createDB 

は、Android、特定の作成SQLスクリプトを追加することを忘れないでください:

CREATE TABLE IF NOT EXISTS "android_metadata" ("locale" TEXT DEFAULT 'en_US'); 
INSERT OR REPLACE INTO "android_metadata" (ROWID, "locale") VALUES ((SELECT ROWID FROM "android_metadata" WHERE "locale" = 'en_US'), 'en_US'); 

また、あなたは、レクレーションを処理する必要があります(たとえば、作成前にdbファイルを削除するか、CREATE TABLE IF NOT EXISTSまたはINSERT OR IGNORE INTO intu initスクリプトのような安全なSQL文を入力してください)

アプリケーションの読み込み方法は、 Copy SQLite database from assets folder

関連する問題