虽然返回相反的表,但表没有更新更新

时间:2015-04-10 02:11:19

标签: java android sqlite

我有一个问题,我的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;
}

1 个答案:

答案 0 :(得分:1)

你去吧。您没有在cursorToView()中加载描述。

如果您运行模拟器,下次您可以阅读自己的数据库以查看是否缺少任何条目。 How to view data saved in android database(SQLite)?