Как обновить несколько строк sqlite на основе результатов запроса (Android, SQLITE) - PullRequest
2 голосов
/ 01 апреля 2012

Я выполнил rawQuery в Android, который возвращает несколько результатов, которые указывают на разные строки.

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) в моей другой таблице.

Я понимаю, что мне придется поработать с курсором. Но я был бы очень признателен, если бы кто-нибудь мог дать мне некоторые общие основы для начала - я очень тяжело боролся с этим.

ЛУЧШИЙ ПРИМЕР:

Я запрашиваю в своей таблице улиц все записи, в которых мой Street_id = 5. Я получаю два результата. В этих возвращенных строках у меня есть столбец с именем List_id. Данные в двух столбцах List_id равны 2 и 5. Затем мне нужно обновить поле с именем Counter my Lists table на основе _id, равного 2 и 5.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Похоже, все, что вам нужно сделать, это также иметь пункт where в вашем запросе на обновление.

String filter = "Street_id=" + 5; 
ContentValues args = new ContentValues(); 
args.put(Counter, "value"); 
myDB.update("Streets", args, filter, null);

, который должен выполнять эту работу

EDIT

db.rawQuery("update Streets (Counter) Set (Value) Where Street_id=5, (Value) Where Street_id=5");

это обновит значение в двух строках, вы можете динамически генерировать этот запрос в зависимости от того, сколько строк возвращает предыдущий запрос.

EDIT

ok,давайте попробуем

db.rawQuery("update Lists (Counter) Set (Value) Where _id=2, (Value) Where _id=5");

объясните с примером, если это не то, что вам нужно или у вас возникли проблемы с

, запрос выше приведёт к обновлению столбца Counter в таблице Lists с Value где первый ряд _id = 2 и второй ряд _id=5.

1 голос
/ 01 апреля 2012
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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...