1

次の問題があります。Logcatの「Stores」テーブルにアクセスするたびに、次のエラーメッセージが表示されます。

10-24 15:09:06.955: E/SQLiteLog(20264): (1) no such table: Stores

しかし、データベースを削除してすべてのテーブルを再度作成すると、Logcatでの作成中にエラーは表示されません。テーブル「Categories」にアクセスしたり書き込んだりしようとすると、エラーは発生せず、「Stores」のみが発生します。後でsqlitestudioでSQLiteデータベースを参照すると、挿入した値を持つテーブルカテゴリのみが表示され、他には何も表示されません。「OpeningHours」も欠落していることがわかります。まだ作成されていないときにこれらのテーブルにアクセスしようとすることは可能ですか?

これが私の作成コードです。

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(context.getString(R.string.sql_create));
}

それがSQLコードです

    <string name="sql_create">
CREATE  TABLE IF NOT EXISTS `Categories` (

  `idCategories` INTEGER  NOT NULL ,

  `name` TEXT,

  PRIMARY KEY (`idCategories`) );


CREATE  TABLE IF NOT EXISTS `Stores` (

  `idStores` INTEGER NOT NULL ,

  `name` TEXT NOT NULL ,

  `locationAdress` TEXT  ,

  `locationLongitude` INTEGER ,

  `locationLatitude` INTEGER ,

  `category` INTEGER  NOT NULL ,

  `telephoneNumerber` TEXT  ,

  PRIMARY KEY (`idStores`) );


CREATE  TABLE IF NOT EXISTS `OpeningHours` (

  `idOpeningHours` INTEGER  NOT NULL ,

  `store` INTEGER  NOT NULL ,

  `day` INTEGER ,

  `forenoon` TEXT  ,

  `afternoon` TEXT  ,

  PRIMARY KEY (`idOpeningHours`) );
    </string>
4

2 に答える 2

3

AndroidexecSQLは単一のステートメントを実行します:http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String)

OpeningHoursつまり、SQLスクリプトの最後のステートメントであるテーブルを1つだけ作成しているということです。1回の呼び出しで各作成を分離する必要がありexecSQLます。

于 2013-03-03T12:36:36.730 に答える
0

すべてのスレッドからSQLiteDatabaseのインスタンスを1つだけ使用するようにしてください。このようにして、SQLiteデータベースへのアクセスに関する多くの問題を回避できます。

于 2013-03-03T12:37:38.843 に答える