我在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表的字段。
答案 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
表格Lists
列Value
,其中第一行为_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
}