LoginSignup
0
0

More than 3 years have passed since last update.

【Android】no such tableエラーの解決策

Posted at

no such table エラーの原因

  1. aというテーブルをMain.dbに作るHelperクラスをインスタンス化する
  2. 別のhelperクラスでbというテーブルをMain.db(同一名のDB)に作成する
  3. SQliteExceptionエラーで落ちる

→bテーブル作成用のHelperクラスのコンストラクタで、Main.dbを新規作成しようとしているが、Main.dbはすでに作成されているため、新しく作ることができず、bテーブルのonCreateが呼ばれないため、テーブルは作成されずno such tableとなる。

A_helper.java
public A_Helper(Context context) {
        super(context, "Main.db", null, 1);
    }
B_helper.java

 public B_Helper(Context context) {
        super(context, "Main.db", null, 1);
    }

解決策

1.Helperクラスを1つに統合して、onCreateにCREATE TABLE文を2つ記載する。

HogeHelper.java
 public HogeHelper(Context context) {
        super(context, "Main.db", null, 1);
    }
@Override
    public void onCreate(SQLiteDatabase db) {
        // テーブル作成
        db.execSQL("CREATE TABLE " + A_TABLE_NAME +
                " (" + COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + COLUMN_USER_NAME + " TEXT , "
                + COLUMN_USER_PASSWORD + " TEXT " + ");");

        db.execSQL("CREATE TABLE " + B_TABLE_NAME +
                " (" + COLUMN_BOOK_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + COLUMN_BOOK_TITLE + " TEXT , "
                + COLUMN_BOOK_IMAGE + " TEXT , "
                + COLUMN_BOOK_REVIEW + " TEXT " + ");");
    }

2.bテーブルのHelperクラスのDB名を変更する。

A_helper.java
public A_Helper(Context context) {
        super(context, "Main.db", null, 1);
    }
B_helper.java

 public B_Helper(Context context) {
        super(context, "Sub.db", null, 1);
    }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0