- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试调用 onUpgrade() 来更新我的包含几列的表格。然而,当我运行该应用程序时,我在插入语句中收到一条错误消息,指出该表中不存在列(我尝试在 onUpgrade() 中添加的列)。非常感谢您的帮助。这是我的 SQLite 帮助程序类://更新和工作
public class TasksSQLiteOpenHelper extends SQLiteOpenHelper {
public static final int VERSION = 3;
public static final String DB_NAME = "tasks_db.sqlite";
public static final String TASKS_TABLE = "tasks";
public static final String TASK_ID = "id";
public static final String TASK_NAME = "name";
public static final String TASK_RESPONSIBLE = "responsible";
public static final String TASK_PRIORITY = "priority";
public static final String TASK_DATETIME = "taskdatetime";
public TasksSQLiteOpenHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
createTables(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.v("test",Integer.toString(oldVersion));
Log.v("test", Integer.toString(newVersion));
switch(oldVersion){
case 1: db.execSQL("ALTER TABLE "+ TASKS_TABLE +" ADD COLUMN "+ TASK_RESPONSIBLE +" TEXT");
db.execSQL("ALTER TABLE "+ TASKS_TABLE +" ADD COLUMN "+ TASK_PRIORITY +" TEXT");
Log.v("test","res + pri created");
break;
case 2: db.execSQL("ALTER TABLE "+ TASKS_TABLE +" ADD COLUMN "+ TASK_DATETIME +" TEXT");
Log.v("test","date created");
break;
}
}
protected void createTables(SQLiteDatabase db) {
db.execSQL(
"create table " + TASKS_TABLE+" (" +
TASK_ID + " integer primary key,"+
TASK_NAME + " text"+
");"
);
}
}这是我的应用程序类//更新和工作解决方案
public class TaskManagerApplication extends Application {
private ArrayList<Task> currentTasks;
public SQLiteDatabase database;
@Override
public void onCreate() {
super.onCreate();
TasksSQLiteOpenHelper helper = new TasksSQLiteOpenHelper(this);
database = helper.getWritableDatabase();
if (null == currentTasks) {
loadTasks();
}
}
private void loadTasks() {
currentTasks = new ArrayList<Task>();
Cursor tasksCursor = database.query(TASKS_TABLE, new String[] {TASK_ID, TASK_NAME,TASK_RESPONSIBLE,TASK_PRIORITY,TASK_DATETIME}, null, null, null, null, null);
tasksCursor.moveToFirst();
Task t;
if (! tasksCursor.isAfterLast()) {
do {
long id = tasksCursor.getLong(0);
String name = tasksCursor.getString(1);
String responsible = tasksCursor.getString(2);
String priority = tasksCursor.getString(3);
String datetime = tasksCursor.getString(4);
t = new Task(name, priority, responsible, datetime);
t.setId(id);
currentTasks.add(t);
} while (tasksCursor.moveToNext());
}
tasksCursor.close();
}
public void setCurrentTask(ArrayList<Task> currentTask) {
this.currentTasks = currentTask; // set tasks in array
}
public ArrayList<Task> getCurrentTasks() {
return currentTasks; //call back tasks
}
public void addTask(Task t) { // add new t of type Task
assert(null != t); //check for null entries - avoid crashing
ContentValues values = new ContentValues();
values.put(TASK_NAME, t.getName());
values.put(TASK_PRIORITY, t.getPriority());
values.put(TASK_RESPONSIBLE, t.getResponsible());
values.put(TASK_DATETIME, t.getDatetime());
//Log.v("test", TASK_DATETIME);
t.setId(database.insert(TASKS_TABLE, null, values));
currentTasks.add(t);
}
public void remove(long id){
//remove statement from table using where statement id
database.delete(TASKS_TABLE, TASK_ID +" ="+ id, null);
}
这也是我的 logcat 输出
08-28 16:30:41.170: I/Database(8931): sqlite returned: error code = 1, msg = table tasks has no column named datetime
08-28 16:30:41.190: E/Database(8931): Error inserting datetime=Aug 28, 2012 4:30:41 PM responsible=Me priority=Medium name=go chi
08-28 16:30:41.190: E/Database(8931): android.database.sqlite.SQLiteException: table tasks has no column named datetime: , while compiling: INSERT INTO tasks(datetime, responsible, priority, name) VALUES(?, ?, ?, ?);
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1290)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1710)
08-28 16:30:41.190: E/Database(8931): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1567)
08-28 16:30:41.190: E/Database(8931): at com.id11078995.ghnaim.exercise1.TaskManagerApplication.addTask(TaskManagerApplication.java:64)
08-28 16:30:41.190: E/Database(8931): at com.id11078995.ghnaim.exercise1.AddTaskActivity.addTask(AddTaskActivity.java:59)
08-28 16:30:41.190: E/Database(8931): at com.id11078995.ghnaim.exercise1.AddTaskActivity.onOptionsItemSelected(AddTaskActivity.java:134)
08-28 16:30:41.190: E/Database(8931): at and roid.app.Activity.onMenuItemSelected(Activity.java:2211)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:775)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:860)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
08-28 16:30:41.190: E/Database(8931): at android.view.View$PerformClick.run(View.java:9152)
08-28 16:30:41.190: E/Database(8931): at android.os.Handler.handleCallback(Handler.java:587)
08-28 16:30:41.190: E/Database(8931): at android.os.Handler.dispatchMessage(Handler.java:92)
08-28 16:30:41.190: E/Database(8931): at android.os.Looper.loop(Looper.java:130)
08-28 16:30:41.190: E/Database(8931): at android.app.ActivityThread.main(ActivityThread.java:3691)
08-28 16:30:41.190: E/Database(8931): at java.lang.reflect.Method.invokeNative(Native Method)
08-28 16:30:41.190: E/Database(8931): at java.lang.reflect.Method.invoke(Method.java:507)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
08-28 16:30:41.190: E/Database(8931): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
08-28 16:30:41.190: E/Database(8931): at dalvik.system.NativeStart.main(Native Method)
最佳答案
我想这太明显了,但是您是否更改了数据库版本?如果不是,onUpgrade() 方法将不起作用
关于android - onUpgrade() 方法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153933/
我正在尝试通过向我的 android 应用程序中的 Sqlite 表添加一列来升级某个表。我在我的 DBHelper 的 onUpgrade 方法中添加了一个 alter table 语句。 这是我遇
我正在尝试调用 onUpgrade() 来更新我的包含几列的表格。然而,当我运行该应用程序时,我在插入语句中收到一条错误消息,指出该表中不存在列(我尝试在 onUpgrade() 中添加的列)。非常感
我对 onUpgrade 有点困惑。我正在开发我的应用程序,在开发过程中我确实更改了 DATABASE_VERSION 五次,所以现在是 6。 一切都很顺利,直到我从手机上完全卸载应用程序并重新构建它
我是 Android 和数据库的新手,我在 DatabaseIncomeOutcome.java 类中有这个方法: public DbHelper(Context context) {
我在 android 中的 SQLite 数据库中遇到问题。 在 SQLiteOpenHelper 类的 onCreate(SQLiteDatabase db) 方法中,我正在创建表。现在我在 Pla
我正在尝试更新我的 Android 应用程序中的数据库。当我更新版本号时,会调用 onUpgrade,但版本号不会增加,因此每次访问数据库时都会调用 onUpgrade。这是我的代码: private
我正在开发我的应用程序的第二个版本。我遇到了一个问题。 在我的应用程序中,数据库位于 Assets 文件夹中。现在我想从第二个版本的 Assets 文件夹更新我的数据库。 我尝试将代码升级为: //
我已经使用 onUpgrade() 添加了一个表,现在我刚刚意识到需要添加另一个表。我希望在不丢失任何以前的数据或表格的情况下执行此操作。 我尝试从 onUpgrade 中删除所有内容以添加新表,但它
我正在使用预填充的数据库。在 Mozilla 中使用 SQLite Manager,现在我有一个虚拟数据库,只是想测试 onUpgrade 方法,因此我更改了其中一列中的字符串,将其导出为新数据库,正
您可以在下面看到我的数据库助手类。我使用在 Assets 文件夹中导入的预填充 SQLite 数据库。每当我向现有数据库添加表时,如果我的应用程序已安装在手机上,则不会出现此类表错误。我想我的 onU
我在表格中添加了一列 (SUM)。我认为重写/重新创建表所需要做的就是为 DATABASE_VERSION 创建变量,但这不起作用。我的 onUpgrade() 方法中需要一些东西吗? 版本变量: p
您好,我目前正在开发一款语言词典应用。该数据库来 self 手动输入的 SQLite 数据库。该应用程序的特点是用户可以要求添加任何不在列表中的单词,因此每次更新应用程序时我都必须手动更新数据库。 问
情况是这样的。我正在升级我的数据库,添加一个列。升级似乎很顺利。我可以看到添加了新列,但问题是当我的应用程序从旧版本升级到带有新数据库的新版本时,我强制关闭了。访问新列时似乎发生强制关闭。但是,如果我
我的 onUpgrade 函数有一个小问题。代码如下: @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int n
我的 Android 应用程序中有一个只读数据库,我会定期更新该数据库。该应用始终在其 Assets 中携带最新版本的数据库。 我增加了传递给 SQLiteOpenHelper 子类的构造函数的版本号
在我的应用程序中,我有一个数据库,它是使用 DBHelper 类中的数据库查询创建的。我希望 onUpgrade 语句在安装 apk 时运行,因为用户可能会卸载并安装相同的应用程序。 在这种情况下,它
在我的 dbHelper 中: onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 函数我将一张表保存到外部数据库。 所以我 附加
我正在尝试将我的数据库从版本 1 升级到版本 2。我正在分配 DATABASE_VERSION = 2(也分配了第一个版本)但从未调用过 onUpgrade .可能代码中有明显的错误,但我看不到它,因
在我的 Android 项目中,我有一个使用了一段时间的表。现在我想删除一列“image_byte”并添加一个新列“image_path”。我不能只是在使用应用程序时重命名该列,并且需要删除 imag
有人能解释一下如何在 SqliteDbOpenHelper 类中调用 onUpgrade 函数吗?我正在打开我的数据库,但它没有调用 onUpgrade,即使我已经更改了 DB_VERSION。 见以
我是一名优秀的程序员,十分优秀!