Android Studio - SQLiteOpenHelper问题

时间:2015-10-12 12:02:12

标签: android sqlite

我有以下Java类

package com.sjhdevelopment.shaunharrison.myejuiceapp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "EJuiceData.db";
public static final int DATABASE_VERSION = 1;


public MyDBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public void onCreate(SQLiteDatabase database) {
    database.execSQL("create table if not exists Inventory");
}

@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    if (newVersion > oldVersion)
        database.execSQL("ALTER TABLE Recipe ADD COLUMN NOTES TEXT");
    onCreate(database);
}

}

然后在我的主要活动中,我有以下内容;

public class Calculation extends AppCompatActivity {
   private MyDBHelper dbHelper;
   protected void onCreate(Bundle savedInstanceState)
   {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_calculation);
      try {
        dbHelper = new MyDBHelper(this);
        dbHelper.getWritableDatabase();

      }
      catch(Exception e)
      {
        showError("Error", e.getMessage());
      }
   }

然而,当我调试代码时,看看是否正在使用try和database.execSQL上的断点创建数据库+表(“创建.... 有调试器实际上没有进入MyDBHelper类做任何事情,因此我假设没有创建数据库+表

我在网上看过,它说当调用getWritableDatabase / readable时,应调用onCreate方法

关于我做错了什么的任何想法?

2 个答案:

答案 0 :(得分:2)

只有在第一次创建数据库时才会调用

onCreate(...)。如果您想更改数据库,则必须增加DATABASE_VERSION,然后它会跳转到onUpgrade(...)

答案 1 :(得分:0)

看起来你的SQL在创建上是不正确的。而不是database.execSQL("create table if not exists Inventory");它应该是

database.execSQL("CREATE TABLE table_name 
                  (id_column INTEGER PRIMARY KEY
                  , column_name TEXT);";

您需要手动创建包含所有已更正列的每个表。一旦您第一次调用数据库,就会创建它们。