如何根据查询结果更新多个sqlite行(Android、sqlite)

如何根据查询结果更新多个sqlite行(Android、sqlite),android,sqlite,Android,Sqlite,我在android中执行了一个rawQuery,它返回指向不同行的多个结果 example: Cursor cursor = db.rawQuery("Select id as _id, List_id, Street_id FROM Streets WHERE Street_id = 5, null); 在我的表中,这将返回两行: List_id = 2, Street_id = 5 List_id = 7, Street_id = 5 然后,我想在一个单独的表中更新一个名为Count

我在android中执行了一个rawQuery,它返回指向不同行的多个结果

example:  Cursor cursor = db.rawQuery("Select id as _id, List_id, Street_id FROM Streets WHERE Street_id = 5, null);
在我的表中,这将返回两行:

List_id = 2, Street_id = 5 
List_id = 7, Street_id = 5
然后,我想在一个单独的表中更新一个名为Counter的列,这两行在我的另一个表中同样对应于List_id 2和List_id 7(分别为_id=3和_id=8)

我知道我将不得不做一些光标管理。但如果有人能给我一些入门的基本知识,我会非常感激的——我一直在努力解决这个问题

更好的例子:


我查询我的Streets表,查找我的Street_id=5的所有记录。我得到两个结果。在这些返回的行中,我有一个名为List_id的列。两个List_id列中的数据分别为2和5。然后,我需要根据等于2和5的_id更新名为Counter my Lists table的字段

看起来您所要做的就是在更新查询中也包含where子句

String filter = "Street_id=" + 5; 
ContentValues args = new ContentValues(); 
args.put(Counter, "value"); 
myDB.update("Streets", args, filter, null);
这应该可以完成任务

编辑

db.rawQuery("update Streets (Counter) Set (Value) Where Street_id=5, (Value) Where Street_id=5");
这将更新两行中的值,您可以根据之前查询返回的行数动态生成此查询

编辑

db.rawQuery("update Streets (Counter) Set (Value) Where Street_id=5, (Value) Where Street_id=5");
好的,让我们试试

db.rawQuery("update Lists (Counter) Set (Value) Where _id=2, (Value) Where _id=5");
请举例说明,如果这不是你想要的,或者你在哪里遇到了麻烦


上面的查询将使用
值更新
列表中的
计数器
列,其中第一行的
\u id=2
和第二行的
\u id=5

看起来您所要做的就是在更新查询中也有where子句

String filter = "Street_id=" + 5; 
ContentValues args = new ContentValues(); 
args.put(Counter, "value"); 
myDB.update("Streets", args, filter, null);
public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "android_api";

    // Login table name
    private static final String TABLE_LOGIN = "login";

    // Login Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_UID = "uid";
    private static final String KEY_CREATED_AT = "created_at";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
                + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_NAME + " TEXT,"
                + KEY_EMAIL + " TEXT UNIQUE,"
                + KEY_UID + " TEXT,"
                + KEY_CREATED_AT + " TEXT" + ")";
        db.execSQL(CREATE_LOGIN_TABLE);
    }
    public void addUser(String name, String email, String uid, String created_at) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, name); // Name
        values.put(KEY_EMAIL, email); // Email
        values.put(KEY_UID, uid); // Email
        values.put(KEY_CREATED_AT, created_at); // Created At

        // Inserting Row
        db.insert(TABLE_LOGIN, null, values);
        db.close(); // Closing database connection
    }
这应该可以完成任务

编辑

db.rawQuery("update Streets (Counter) Set (Value) Where Street_id=5, (Value) Where Street_id=5");
这将更新两行中的值,您可以根据之前查询返回的行数动态生成此查询

编辑

db.rawQuery("update Streets (Counter) Set (Value) Where Street_id=5, (Value) Where Street_id=5");
好的,让我们试试

db.rawQuery("update Lists (Counter) Set (Value) Where _id=2, (Value) Where _id=5");
请举例说明,如果这不是你想要的,或者你在哪里遇到了麻烦


上面的查询将使用
值更新
列表中的
计数器
列,其中第一行的
\u id=2
和第二行的
\u id=5

实际上我输入错误-请参阅上面的编辑。实际上,我正试图根据我在初始查询中得到的结果更新不同表格中的多行。我不确定我是否理解(对不起)。基本上,我需要将上面的两个列表id结果从我的STREETS表中取出,然后更新列表表中与列表id对应的两行(STREETS中的列表id字段中的值相当于列表中的列表id字段)。我肯定我解释得很糟糕:)我试图在我的原始帖子中添加一个更好的例子。我也非常感谢你的帮助。根据你的例子,我的第二个查询可以很好地工作。啊,我现在明白了。现在,在你的例子中,你实际上写出了“2”和“5”。我如何根据之前的查询存储这些值以首先获取数据?目前我只能存储第一个,即“2”。“5”被忽略。实际上我输入错误-请参阅上面我的编辑。实际上,我正试图根据我在初始查询中得到的结果更新不同表格中的多行。我不确定我是否理解(对不起)。基本上,我需要将上面的两个列表id结果从我的STREETS表中取出,然后更新列表表中与列表id对应的两行(STREETS中的列表id字段中的值相当于列表中的列表id字段)。我肯定我解释得很糟糕:)我试图在我的原始帖子中添加一个更好的例子。我也非常感谢你的帮助。根据你的例子,我的第二个查询可以很好地工作。啊,我现在明白了。现在,在你的例子中,你实际上写出了“2”和“5”。我如何根据之前的查询存储这些值以首先获取数据?目前我只能存储第一个,即“2”。忽略“5”。
public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "android_api";

    // Login table name
    private static final String TABLE_LOGIN = "login";

    // Login Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_UID = "uid";
    private static final String KEY_CREATED_AT = "created_at";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
                + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_NAME + " TEXT,"
                + KEY_EMAIL + " TEXT UNIQUE,"
                + KEY_UID + " TEXT,"
                + KEY_CREATED_AT + " TEXT" + ")";
        db.execSQL(CREATE_LOGIN_TABLE);
    }
    public void addUser(String name, String email, String uid, String created_at) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, name); // Name
        values.put(KEY_EMAIL, email); // Email
        values.put(KEY_UID, uid); // Email
        values.put(KEY_CREATED_AT, created_at); // Created At

        // Inserting Row
        db.insert(TABLE_LOGIN, null, values);
        db.close(); // Closing database connection
    }