2012-04-01 57 views
2

我已經執行該函數返回一個指向不同行的多個結果的rawQuery android的sqlite的多行。如何更新基於查詢結果(安卓,SQLite的)

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 

那麼我想以更新指定的櫃檯在一個單獨的表爲LIST_ID 2和LIST_ID 7將對應得兩排柱(這將是_id = 3和_id = 8)在我的另一張桌子。

我明白,我將不得不做一些光標management.but我真的很感激,如果有人可以給我一些開始一般基礎知識 - 我一直在努力對這個相當困難。

更好的例子:

我查詢我的街道表在我的Street_id = 5,我得到兩個結果的所有記錄。在那些返回的行中,我有一個名爲List_id的列。兩個List_id列中的數據是2和5.然後,我需要根據等於2和5的_id更新一個名爲Counter my Lists表的字段。

回答

2

看起來您所要做的就是更新查詢中的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"); 

請舉例說明,如果這不是你想要的或者您有

以上查詢的麻煩將在更新CounterListsValue,其中第一行的_id = 2排和第二排的_id=5

+0

其實我拼寫錯誤 - 見我的編輯以上。我實際上試圖根據我在初始查詢中得到的結果更新不同表中的多行。 – ADK 2012-04-01 02:07:11

+0

@ADK檢查更新...應該爲你工作 – Mayank 2012-04-01 02:16:18

+0

我不知道我理解(對不起)。基本上我需要從我的STREETS表中取出兩個List_id結果,然後更新我的LISTS表,以查找對應於List_id的兩行。 (STREETS中List_id字段中的值等同於LISTS中的_id字段)。我相信我解釋得不好:) – ADK 2012-04-01 02:29:31

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 
    }