2012-04-01 2 views
2

Я выполнил rawQuery в android, который возвращает несколько результатов, которые указывают на разные строки.Как обновить несколько строк sqlite на основе результатов запроса (Android, 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) в моей другой таблице.

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

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

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

ответ

2

похоже, что все, что вам нужно, это иметь 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

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

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

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

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

+0

На самом деле я ошибся - см. Мои правки выше. Я на самом деле пытаюсь обновить несколько строк в другом ответе на основе результатов, полученных в моем первоначальном запросе. – ADK

+0

@ADK проверить обновление ... что должно сработать для вас – Mayank

+0

Я не уверен, что понимаю (извините). В основном мне нужно взять мои два результата List_id сверху из моей таблицы STREETS, а затем обновить таблицу LISTS для двух строк, которые будут соответствовать List_id. (Значения в моем поле List_id в STREETS эквивалентны моему полю _id в LISTS). Я уверен, что объясняю это плохо :) – ADK

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 
    } 
Смежные вопросы