Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sqlite插入和更新其他列的值_Java_Android_Sqlite - Fatal编程技术网

Java Sqlite插入和更新其他列的值

Java Sqlite插入和更新其他列的值,java,android,sqlite,Java,Android,Sqlite,我有两张桌子;“父”和“子”表。(不是SQLite缺陷,只是我称之为SQLite缺陷) 每次创建子对象时,都会在其一列中为其指定值0。 创建新的父对象时,每个未分配的子对象都必须将前面提到的值更新为父对象的ID。我的代码如下所示: public long createWorkout(String workoutName){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new Con

我有两张桌子;“父”和“子”表。(不是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中使用的,我已经调试并验证了返回的训练pk id,在selectQuery中找到了45个对象,但它不起作用。我还尝试了ContentValues来更新这些值,但没有成功

将“==”编辑为“=”,但该值仍未更新。 这来自eclipse——我创建了一个名为“测试”的训练,ID为160。 练习“test1”的ID为430(唯一),但训练ID仍然为0。

我已经有一段时间没有做任何安卓操作了,但我相信“==”操作符是不正确的:

String k=“UPDATE”+表格练习+“SET”+关键训练ID+“==”+训练pk ID

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


我也相信有一种更好的方式来做你想做的事情,目前在Android上刷新我的记忆,这样我会回复你。同时告诉我替换操作员是否有效

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

String k=“UPDATE”+表格锻炼+“SET”+按键锻炼锻炼锻炼锻炼锻炼ID+“=”+锻炼锻炼pk锻炼ID;

查看关键训练ID和训练pk ID之间的“=”。

是的,因此另一种方法是使用子查询。所以它看起来像:

UPDATE TABLE\u exercise SET KEY\u WORKOUT\u ID=WORKOUT\u PK\u ID,其中KEY\u WORKOUT\u ID=
(
*在此子查询以选择父对象ID*
)

这里有一个帮助链接:


让我知道这对您的作用。

我已经用您的回复和一些新信息更新了我的帖子。我忘了说,您的更新方法需要知道要设置哪一行。这样做:String k=“UPDATE”+TABLE\u EXERCISE+“SET”+KEY\u-WORKOUT\u-ID+“=”+WORKOUT\u-pk\u-ID+”其中“+PrimaryKey\u-ID+”=”+cursor.getString(numberOfCell);你说的“哪一个”是什么意思?当我使用光标时,它不会自动知道需要更新的是当前对象的KEY\u-WORKOUT\u-ID吗?你说的PrimaryKey\u-ID是指练习吗?numberOfCell是指带有这些ID的列吗?这不管用-/对于primaryKey_id,我指的是要更新的当前行的primaryKey;对于numberOfCell,我指的是可以找到表的primaryKey的列。例如,您的TABLE_练习是这样的:[data1 | data2 | pk_id]代码应该是这样的:String k=“UPDATE”+TABLE_练习+“SET”+KEY_-WORKOUT_id+“=”+WORKOUT_-pk_id+”,其中pk_id=“+cursor.getString(2);我已经用你的回复和一些新信息更新了我的帖子。