SqliteOpenHelper onCreate()方法更改被忽略

时间:2016-05-30 15:05:30

标签: java android sqlite

我是Android开发的新手,我正在制作一个简单的Android应用程序,它使用sqlite来保存一些数据。

我有一个SqliteOpenHelper来处理事物的数据库方面。我有一个启动数据库的onCreate方法

类构造函数

public CardDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, CARD_DATABASE_NAME, factory, CARD_DATABASE_VERSION);
    }

我在另一个类中实例化它

    cardDBHandler = new CardDBHandler(this, null, null, 1);

onCreate方法

 @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE " + TABLE_CARDS + "(" +
            CARD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            DECK_ID + " INTEGER, FOREIGN KEY (" + DECK_ID +") 
            REFERENCES DATABASE_NAME(COLUMN_ID), " +
            CARD_FRONT + " TEXT, " +
            CARD_BACK + " TEXT " +
            ");";
        db.execSQL(query);
        Log.d(TAG, "Created card database");
    }

我已修改此方法,但我的应用程序未注册更改,这导致一些例外。

我是否应该像添加活动一样将此类添加到清单中? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果在数据库生成后进行了更改,则必须更新数据库版本号并设置onUpgrade方法以删除并重新创建表。

您也可以从构造函数中删除一些参数,因为它们未被使用。

public CardDBHandler(Context context, SQLiteDatabase.CursorFactory factory) {
    super(context, CARD_DATABASE_NAME, factory, CARD_DATABASE_VERSION);
}

然后

cardDBHandler = new CardDBHandler(this, null);

答案 1 :(得分:-3)

你删除这些行:

super.onCreate(stuff);
setContentView(R.layout.stuff);

你需要它,第一行调用onCreate父亲,第二行调用视图。

如果您想运行这些脚本,请使用您将在onCreate中调用的单独方法执行此操作

super.onCreate(stuff);
setContentView(R.layout.stuff);
doScript();




private void doScript(){
}