Sqlite插入并更新其他列的值

时间:2014-10-18 20:05:05

标签: java android sqlite

我有两张桌子; '父母'和'孩子'表。 (不是SQLite的诽谤,只是我称之为的东西)

每次创建子对象时,都会在其一个列中为其指定值0。 创建新的父对象时,每个未分配的子对象都必须将之前提到的值更新为父对象的ID。我的代码如下所示:

public long createWorkout(String workoutName){
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, workoutName);

    //Creates a new parent-object (a workout - the childs are exercises)
    //the generated ID is returned as a long (workout_pk_id)
    long workout_pk_id = db.insert(TABLE_WORKOUT, null, values);

    //Selects all objects in the child-table with KEY_WORKOUT_ID = 0 (the column mentioned before)

    String selectQuery = "SELECT * FROM " + TABLE_EXERCISE + " WHERE " + KEY_WORKOUT_ID + " == " + 0;

    Cursor cursor = db.rawQuery(selectQuery, null);
    //Takes each found object with value 0, and updates the value to the returned parent-ID from before.
    if (cursor.moveToFirst()) {
        do {
            String k = "UPDATE " + TABLE_EXERCISE + " SET " + KEY_WORKOUT_ID + " == " + workout_pk_id;
            db.execSQL(k);

        } while (cursor.moveToNext());
    }
    return workout_pk_id;
}

但由于某种原因,这不起作用。孩子/练习的ID仍为0.你能帮助我吗? 我不知道错误是否在我的表的设置中,在这种情况下我可以提供更多信息。 提前致谢。 /叶普

编辑:这在android中使用,我已经调试并验证返回了workout_pk_id,在selectQuery中找到了45个对象,但它不起作用。我也尝试过ContentValues来更新值,但是没有用。

将“==”编辑为“=”,但该值仍未更新。 这是来自日食 - 我创造了一个名为“测试”的锻炼,ID为160。 练习“test1”的ID为430(唯一),但workout_id仍为0。 enter image description here

3 个答案:

答案 0 :(得分:1)

自从我做了任何Android操作以来已经有一段时间,但我认为“==”运算符不正确:

字符串k =“UPDATE”+ TABLE_EXERCISE +“SET”+ KEY_WORKOUT_ID +“==”+ workout_pk_id;

您使用的运算符是比较运算符,“=”是赋值运算符。

我也相信有更好的方法来做你想做的事情,目前在Android上让我的记忆更新,所以我会回复你。在此期间告诉我是否更换操作员

答案 1 :(得分:1)

是的,你可以这样做的另一种方法是使用子查询。所以它看起来像:

UPDATE TABLE_EXCERCISE SET KEY_WORKOUT_ID = WORKOUT_PK_ID WHERE KEY_WORKOUT_ID = ( *subquery here to select parent object ids* )

这是一个帮助链接: http://www.tutorialspoint.com/sqlite/sqlite_sub_queries.htm

让我知道这对你有用。

答案 2 :(得分:0)

我认为您必须查看更新查询。 它必须是:

String k = "UPDATE " + TABLE_EXERCISE + " SET " + KEY_WORKOUT_ID + " = " + workout_pk_id;

看看" ="在KEY_WORKOUT_ID和workout_pk_id之间。