2011-06-21 19 views
7

私は、SQL CREATE TABLEINSERTステートメントを含む大きなテキストファイルを持っています。 SQLiteOpenHelperonCreateメソッドでこのファイルをインポートするにはどうすればよいですか?AndroidでSQLファイルをインポートしてSQLiteデータベースを作成するにはどうすればよいですか?

または、バイナリデータベースファイルを直接使用する方法はありますか?

Android 1.6との互換性が必要です。

答えて

4

SQLiteOpenHelper onCreate()メソッドでは、db.execSQL(...)を使用できますが、これは「テキストファイル」の構造(およびその大きさ)によって異なります。

また、あなたは「船のあなたのアプリとのSQLite DBことができます - あなた自身のsqliteのDBファイルのインポートに問題があなたのことであるあなたにいくつかのアイデアを与えるために、このリンクを参照してください...

Using your own SQLite database in Android applications

+0

取得する方法はあり 'その/データ/データ/ YOUR_PACKAGE /データベース/'パス、それをハードコードする必要はありませんか? – rid

+1

@Radu:getDatabasePath(...)にhttp://developer.android.com/reference/android/content/Context.html#getDatabasePathを試してください。 – Squonk

5

私は同じ問題を解決しなければなりませんでした。直接行う方法を見つけることができませんでしたので、ファイルをres/rawディレクトリに置き、openRawResourceを使用してInputStreamを取得しました。その後私は;で終わるまで行を読みました。私はその後、ステートメントをsqliteデータベースに渡しました。

うまくいけば、他の誰かがより良い方法を提供してくれることを望みますが、私はそれをやり遂げる方法を追加すると思っていました。

0

ファイルを作成したエンジンのバージョンが、dbがインストールされているAndroidデバイスのエンジンのバージョンと一致していることを確認する必要があります。 SQLスクリプトファイルを実行して、実際にAndroidデバイスにインストールされているエンジンを使用してデータベースが作成されていることを確認します。

4

Steve Prenticeの回答に続きます。それは私の実装です:解像度で

mydb.sqlファイル/生

CREATE TABLE table1(col1 INTEGER PRIMARY KEY, col2 TEXT); 
CREATE TABLE table2(col1 INTEGER PRIMARY KEY, col2 TEXT, col3 INTEGER); 

MyClass.java

InputStream inputStream = context.getResources().openRawResource(R.raw.mydb); 

    String queries = ""; 
    try { 
     queries = IOUtils.toString(inputStream); 
    } catch (IOException e) { 
     Util.logException(e); 
    } 

    for (String query : queries.split(";")) { 
     db.execSQL(query); 
    } 
関連する問題