2012-01-02 18 views
0

私はtest.sqliteというデータベースを持っていて、DDMSを使ってデータベースファイルをdata/data/packagename/databasesというフォルダにコピーしました。 私はデータベースを読み込もうとしていますが、テーブルが存在しないためにエラーが発生しています テーブルにアクセスするソリューションは何ですか?androidの既存のデータベースの使い方

以下はデータベースにアクセスするための私のコードです。

SQLiteDatabase myDB = this.openOrCreateDatabase("test.sqlite", 
       SQLiteDatabase.OPEN_READWRITE, null); 
Cursor c = myDB.rawQuery("select a, b from abc", null); 
+0

どこにコピーしましたか?正確なパスをお願いします。 – st0le

+0

はその場所のdata/data/your.package.name/databasesですか? –

+0

はいデータベースのパスはdata/data/package/databasesです。 – Vamshi

答えて

0

ありがとう:

そこで、このような実装を作成します。私は実際にデータ/データ/パッケージ名にデータベースファイルをコピーしたので、エラーが発生しています。

私がやったことは、データベースをdata/data/packagename/databasesフォルダに再度コピーしたことです。

SQLiteDatabase myDB = this.openOrCreateDatabase("test.sqlite", 
       SQLiteDatabase.OPEN_READWRITE, null); 
Cursor c = myDB.rawQuery("select a, b from abc", null); 

これは問題なく機能しています。

0

data/data/<package_name>/databasesディレクトリにsqliteデータベースファイルをコピーします。

次にまた、あなたが正しいデータベースを開き、この中のどのテーブルされているかどうかを確認し、このクエリを見て、

SELECT * FROM sqlite_master where type='table' and name='my_table_name' 
+0

はい、私はこのようでしたが、何の使用 – Vamshi

+0

クエリ上から何を得ている。.. – user370305

+0

ありません、このようなテーブルABC .... – Vamshi

2

なぜする

..あなたがコピーされたSQLiteのデータベースファイルを開いていることを確認しデータベースファイルを直接data/dataフォルダに入れたいのですか?テスト目的のために?私には分かりませんが、私は以下のいずれかのオプションを選択します:

  • サーバーからデータをロードし、データベースに挿入します。
  • assetsフォルダーにデータベースファイルを格納し、バイトをコピーしてappデータベースを作成します(データベースファイルを移動することはできません)。 (要求された通り)

例:

まずあなたは資産/データベースフォルダ内のデータベースファイルを配置する必要があります。あなたのデータベースが1MBより大きい場合は、それを分割する必要があります。 (つまり、データベース1、データベース2、データベース3 ...)

ここでは、すべてのデータベースタスクを実行するクラスがあります。ここでは、DatabaseHelper(SQLiteOpenHelperを拡張)というクラスがあります。データベースのパスと名前を設定することを忘れないでください。

private static String DB_PATH = "/data/data/com.example/databases/"; 
private static String DB_NAME = "mydb.sqlite"; 

あなたのデータベースを分割しなければならないとしたら、あまりにも変数に作品を宣言します。

private static String[] sFiles = {'database1','database2','database3'}; 

getReadableDatabase()メソッドを使用すると、すぐにデータベースを作成/開くことができます。最終的にはそれが働いているの返信用

private void copyDatabase() throws IOException { 
    // Path to the empty database. 
    String outFilename = DB_PATH + DB_NAME; 
    // Open the empty database as the output stream. 
    OutputStream outputDatabase = new FileOutputStream(outFilename); 
    // Transfer bytes from the input file to the output file. 
    byte[] buffer = new byte[1024]; 

    for (int i = 0; i < sFiles.length; ++i) { 
     // Open the local database as the input stream. 
     InputStream is = mContext.getAssets().open("database/" + sFiles[i]); 

     int length; 
     while ((length = is.read(buffer)) > 0) { 
      outputDatabase.write(buffer, 0, length); 
     } 
     // Closing stream. 
     is.close(); 
    } 

    // Closing the streams. 
    outputDatabase.flush(); 
    outputDatabase.close(); 
    // Closing database. 
    close();   
} 
+0

iは、サーバ側で非常に多くのデータを持っていないので、sqliteのは、ロードするために多くの時間がかかりますデータですので、私は既存のデータベースを使用しています – Vamshi

+0

Ok、これはテスト専用です。最終版ではデータをダウンロードするか、データを組み込んだアプリを展開する必要がありますか? –

+0

実際にsqliteはiphoneアプリケーションでビルドされていないので、アンドロイドで同じsqliteを使用しているので、時間がかかりません。 – Vamshi

関連する問題