как использовать whereClause, whereArgs при обновлении таблицы в sqlite? - PullRequest
0 голосов
/ 09 марта 2012

В моем приложении для Android я пытался обновить таблицу, используя

sqliteDatabase.updateWithOnConflict (таблица, значения, whereClause, whereClause, конфликтаAlgorithm)

, но яЯ не имею четкого представления о переменных переменных whereClause и whereClause. Следующий код не выдаст никаких исключений или ошибок, но таблица не будет обновлена.

AndroidOpenDbHelper androidOpenDbHelper = new AndroidOpenDbHelper(CreateListsActivity.this);
                                    SQLiteDatabase sqliteDatabase = androidOpenDbHelper.getWritableDatabase();
                                    ContentValues values = new ContentValues();

                                    values.put(AndroidOpenDbHelper.LIST_NAME, editedKeyword);

                                    sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_LISTS, values, AndroidOpenDbHelper.LIST_NAME + "=" + id,null, SQLiteDatabase.CONFLICT_IGNORE);
                                    sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_KEYWORDS, values, AndroidOpenDbHelper.LIST_NAME + "=" + id, null, SQLiteDatabase.CONFLICT_IGNORE);
                                    sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_TWEET, values, AndroidOpenDbHelper.LIST_NAME + "=" + id, null, SQLiteDatabase.CONFLICT_IGNORE);

                                    sqliteDatabase.close(); 

любое предложение ??

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Ваш алгоритм конфликта - IGNORE - «Когда происходит нарушение ограничения, одна строка, содержащая нарушение ограничения, не вставляется или не изменяется»

Имеет ли AndroidOpenDbHelper.LIST_NAME уникальное ограничение, которым вы можете бытьнарушение?Попробуйте FAIL и проверьте код возврата: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#CONFLICT_FAIL

Также свяжите параметры в операторе.Вот правильный способ использовать, где предложение и аргументы -

sqliteDatabase.updateWithOnConflict(AndroidOpenDbHelper.TABLE_NAME_KEYWORDS, values, AndroidOpenDbHelper.LIST_NAME + "= ?" , new String[]{id}, SQLiteDatabase.CONFLICT_IGNORE);
0 голосов
/ 09 марта 2012

Вы можете написать свой собственный оператор обновления SQL следующим образом:

String sql="update <tableName> set <columnName> = 'newValue' where <columnName>= 'oldValue' ";
sqliteDatabase.execSql(sql,null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...