2011-02-07 6 views
1

私は、の指示に従って、既存のSQLiteデータベースをあなたのAndroidアプリケーションに導入しました。SQLiteテーブルが存在しません既存のSQLiteデータベース(およびテーブル)の例外

テーブル「android_metadata」を照会すると、これは問題ありません。しかし、私自身のテーブル "単語"(プライマリ整数キーの_idを持つ)で同様のクエリを実行すると、テーブルが存在しないという例外が発生し、アプリケーションがクラッシュします。

なぜですか?

コード:

Cursor c = myDatabase.query("android_metadata", null, null, null, null, null, null, null); 

作品が、

Cursor c = myDatabase.query("words", null, null, null, null, null, null, null); 

はテーブルが例外を存在しません返します。

これは私が(パスとファイル名への参照が正しい)のデータベースを作成しています方法です(注:

private void copyDatabase() throws IOException 
{ 
    //Open local db as the input stream 
    InputStream myInput = mContext.getAssets().open(DB_NAME); 

    //Path to the just created empty db 
    String outFileName = DB_PATH + DB_NAME; 

    //Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    //Transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length = 0; 
    while ((length = myInput.read(buffer))>0){ 
     myOutput.write(buffer, 0, length); 
    } 

    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 
} 

:私の目には、テーブルがあり、私はそれを右に探しています。私のSQLiteブラウザで)

+0

誰つもりはいくつかのコードなしにお答えすることはできません... – tobyodavies

+0

それはありませんコーディングの問題 - もし私が別のテーブルではなく1つのテーブルを見つけることができれば、それはsqliteデータベースがどのようにアンドロイドに合うように編集されたかという問題です。私は誰かがこれを見つけたに違いないと確信しています.... – SK9

+0

さらなるコードについては、私は同封の "here"リンクを参照してください。それはかなり標準のSQLiteDatabaseヘルパーのものです。 – SK9

答えて

3

あなたは赤ちゃんに従っています。 android_metadataテーブルは、何であってもすべてのアンドロイドデータベースに作成されます。

問題を特定するための実際のメカニズムは、単にエミュレータでアプリケーションを実行し、データベースをチェックアウトすることです。あなたのエミュレータが動作していると、アプリケーションがデータベースをセットアップしている場合は、実行:あなたが期待するデータベース名を示し

adb shell 
cd /data/data/your.application.package/databases 
ls 

ls場合、実行します。.schema

:sqlite3のプロンプト実行時

sqlite3 <your db file> 

これはデータベースのテーブルを表示します。私の推測では、アンドロイドは実際に外部の場所からあなたのデータベースを読み取っていないので、あなたはメタデータテーブルを見つけることです。それが事実なら、コメントしてください。私はそのプロセスを通してあなたを助けることを試みることができます。

+0

おそらく、これはあなたが '(注:私の目には、テーブルがあります。私はSQLiteブラウザでそれを見ています)'と言ったときのことでした。しかしこれは決定的なメカニズムです。 –

+0

あなたは真剣です。それは私がそれを絞り込むのを助けました。 – SK9

+0

OK - あなたは赤いニシンについてまさに正しいです。テーブル "android_metadata"はデフォルトで作成されているため、Androidに合わせて独自のデータベースに追加したため、見つかったと思いました。その結果、私はcopyDatabaseが呼び出されていて、データベースファイルがロードされていると誤解していました。むしろcopyDatabaseはまったく呼び出されておらず、これが問題を解決しています。私は初めからこれを自分自身でコーディングするほうがはるかに優れていたでしょう - 自己への教訓:公開されているコードを過度に信頼しないでください。私の質問にリンクされたコードを使用することをお勧めします。 – SK9

0

代わりにSQLiteHelpterを使用してDBを作成できます。 これは存在するかどうかをチェックし、存在しない場合はそれを作成します。

私はすでにそれをここでチェックし、他の質問に例を掲載した
Android - Sqlite database method undefined fot type

・ホープ、このことができます:)

+0

ありがとうございます。私のデータベースは読み取り専用の資産です。私はすでにデータベースを新しいものから作成することができましたが、これは別の問題です。 – SK9