我有两张桌子; '父母'和'孩子'表。 (不是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。
答案 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之间。