1. ホーム
  2. android

[解決済み] Android SQLite データベースにテーブルが存在するかどうかを確認するには?

2023-02-28 10:34:42

質問

私は、データベースにすでにレコードがあるかどうかをチェックし、ない場合はいくつかのことを処理し、最終的にそれを挿入し、データが存在する場合は単にデータベースからデータを読み取る必要があるアンドロイドアプリを持っています。私はSQLiteOpenHelperのサブクラスを使用して、SQLiteDatabaseの書き換え可能なインスタンスを作成および取得し、テーブルがまだ存在しない場合は自動的に作成されると思っていました(それを行うコードはonCreate(...)メソッドにあるので)。

しかし、テーブルがまだ存在せず、私が持っている SQLiteDatabase オブジェクトで実行された最初のメソッドが query(...) への呼び出しである場合、私の logcat は "I/Database(26434): sqlite returned: error code = 1, msg = no such table: appdata" のエラーを示し、確かに、Appdata テーブルは作成されていません。

原因について何か考えがありますか?

私は、テーブルが存在するかどうかをテストする方法(存在しない場合、データは確かにその中になく、私はそれに書き込むまでそれを読む必要がないため、テーブルを適切に作成するようです)、またはそれが作成されることを確認する方法、そしてquery(...)への最初の呼び出しに間に合うように、ちょうど空であることを確認する方法を探しています。

EDIT

下の2つの回答の後に投稿されたものです。

私は問題を見つけたかもしれないと思います。私は何らかの理由で、両方とも同じデータベースファイルにアクセスするにもかかわらず、各テーブルに対して異なるSQLiteOpenHelperが作成されることになっていると判断しました。1 つの OpenHelper しか使用しないようにコードをリファクタリングし、その onCreate 内で両方のテーブルを作成すると、よりうまくいくかもしれません...。

どのように解決するのですか?

onCreateメソッドが実行されない原因となっていた問題は、次の事実でした。 SQLiteOpenHelper オブジェクトがデータベースを参照し、各テーブルに別々のオブジェクトを持たないことです。両方のテーブルを 1 つの SQLiteOpenHelper が問題を解決してくれました。