我有以下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方法
关于我做错了什么的任何想法?
答案 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);";
您需要手动创建包含所有已更正列的每个表。一旦您第一次调用数据库,就会创建它们。