【发布时间】:2015-10-12 09:51:26
【问题描述】:
我想在现有数据库中添加一列
但是我想象我处于人们已经获得代码和数据库版本的场景中,我将通过 google play 上的更新进行更改,因此以前的数据不会丢失
为了创建我的数据库,我使用了以下代码;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculation);
db = openOrCreateDatabase("EJuiceData", Context.MODE_PRIVATE, null);
db.execSQL("create table if not exists Inventory(_id integer primary key autoincrement, NAME TEXT NOT NULL, AMOUNT TEXT, PRICE TEXT, AMOUNTLEFT TEXT, WEIGHT TEXT);");
....
我在网上看了一圈,有人提到使用以下命令进行更新;
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE Recipe ADD COLUMN NOTES TEXT");
}
}
但是 onUpgrade 被注释掉,说明它没有被调用,我的代码中也没有说明它是什么版本的数据库或给出了一个新版本
有人知道我是如何解决这个问题的吗?
谢谢
编辑;
通过查看答案,我决定尝试以最有效的方式以及被视为最佳做法的方式进行此操作
所以我创建了一个名为 MyDBHelper 的新 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 MovieDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase database) {
database.execSQL("create table if not exists Recipe");
.....
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
if (newVersion > oldVersion)
database.execSQL("ALTER TABLE Recipe ADD COLUMN NOTES TEXT");
onCreate(database);
}
}
到目前为止,我在 MovieDatabaseHelper 上有一个错误,指出“声明的方法无效;需要返回类型
【问题讨论】:
-
你能发布日志吗?哪一行是错误?您还忘记了 onCreate 之前的
@Override -
没有日志因为我还没跑代码,
public MovieDatabaseHelper(Context context)下面有一条红线 -
用你的类名 (MyDBHelper) 替换 MovieDatabaseHelper。这是构造函数!
-
这确实奏效了,我将此归咎于周一早上!谢谢你
-
所以现在我在不同的表单上输入了以下
MyDBHelper helper = new MyDBHelper(getContext());但是getContext导致错误'无法解析方法'getContext()''