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

时间:2012-04-01 01:18:57

标签: 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

然后我想在另一个表中更新一个名为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表的字段。

2 个答案:

答案 0 :(得分:3)

看起来你要做的就是在更新查询中也有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 Lists (Counter) Set (Value) Where _id=2, (Value) Where _id=5");

请举例解释,如果这不是你想要的或你遇到麻烦的地方

上述查询将更新Counter表格ListsValue,其中第一行为_id = 2,第二行为_id=5

答案 1 :(得分:1)

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
    }