2012-04-01 42 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 
    }