我有一个问题,我的sqlite表"观看"不会根据更新查询进行更新。
views表的构造如下,我的两个外键用于识别主键:
CREATE TABLE views
(description TEXT,
modulesId INTEGER NOT NULL REFERENCES modules(modulesId),
eventId INTEGER NOT NULL REFERENCES events(eventId),
PRIMARY KEY (modulesId, eventId));
使用下面的代码,我试图成功更新表,因为返回的整数取结果为1。
private SQLiteDatabase database;
public void updateViews(String description, int modulesId, int eventId) {
ContentValues values = new ContentValues();
values.put(MyDatabaseManager.VIEWS_DESCRIPTION, description);
String where = "modulesId = " + modulesId + " AND eventId = " + eventId;
int i = database.update(MyDatabaseManager.TABLE_VIEWS, values, where, null);
}
因此。 int i返回1,表示我的行确实已更新。但是当我尝试检索行时,我发现所谓的更新行的描述仍为空。
public List<Views> getAllViews() {
List<Views> views = new ArrayList<Views>();
Cursor cursor = database.query(MyDatabaseManager.TABLE_VIEWS, allViewsColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Views view = cursorToView(cursor);
views.add(view);
cursor.moveToNext();
}
cursor.close();
return views;
}
如果不关闭应用程序,情况就是如此。
我的代码中没有可见的错误,我似乎也无法弄清楚我的logcat。这让我相信我在代码中的某处做了一些根本性的错误。最有可能的代码是我还没有发布,但也许你可以找出我可能出错的地方。
我对编程不是很熟练,但我会尽力遵循任何帮助。谢谢!
更新1:
这看起来很有希望。我会好好看看。谢谢!
private Views cursorToView(Cursor cursor) {
Views view = new Views();
view.setModuleId(cursor.getLong(0));
view.setEventId(cursor.getLong(1));
return view;
}
更新2:回答
此外,我忘记使用我的描述栏更新我的allViewsColumn,但这不是这个特定问题的一部分,但可能会帮助某人。
private Views cursorToView(Cursor cursor) {
Views view = new Views();
view.setModuleId(cursor.getLong(0));
view.setEventId(cursor.getLong(1));
view.setViewDescription(cursor.getString(2));
return view;
}
答案 0 :(得分:1)
你去吧。您没有在cursorToView()中加载描述。
如果您运行模拟器,下次您可以阅读自己的数据库以查看是否缺少任何条目。 How to view data saved in android database(SQLite)?