1

Android アプリで、1 つのデータベースに複数のテーブルを作成したいと考えています。

各テーブルには異なる名前が付けられており、プログラムの実行が開始されるまで名前がわからないため、すべて動的です。

ただし、最初のテーブルが作成され、新しいテーブルが作成されると、「そのようなテーブルはありません」というエラーが表示されません。

これは、テーブルを作成するために私が行うことです:

private class SQLiteHelper extends SQLiteOpenHelper {
    private static final String TAG = "SQLiteHelper";
    private String DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS "
            + helper.getTableName() + "(" + helper.getTableColumns() + ");";


    public SQLiteHelper(Context context) {
        super(context, helper.getDatabaseName(), null, helper
                .getDatabaseVersion());
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);
        Log.d(TAG, "database created");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + helper.getTableName());
        onCreate(db);
    }

}

helper は、DB コンストラクターに渡されるオブジェクトです。

public ProductDB(Context context, IDatabaseHelper helper) {
    this.context = context;
    this.helper = helper;
}

最初にデータベースを作成すると、すべてが正常に機能しますが、2 番目のテーブルを追加する必要があるとすぐに、アクセスしようとするとクラッシュします。

これを修正するにはどうすればよいですか?

4

1 に答える 1

1

これを試して:

 SQLiteDatabase db;
 SQLiteHelper dbHelper = new SQLiteHelper(context);
 db = dbHelper.getWritableDatabase();

        db.execSQL("CREATE TABLE IF NOT EXISTS "
            + helper.getTableName() + "(" + helper.getTableColumns() + ")");
于 2013-06-09T13:32:31.773 に答える