Я уже некоторое время пытаюсь обновить конкретную строку, и кажется, что есть два способа сделать это. Из того, что я читал и пробовал, вы можете просто использовать:
execSQL(String sql)
метод
или:
update(String table, ContentValues values, String whereClause, String[] whereArgs)
метод.
(Сообщите мне, если это неверно, поскольку я новичок в Android и очень новичок в SQL.)
Итак, позвольте мне перейти к моему собственному коду.
myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null);
Я пытаюсь добиться этого:
Обновите Поле1, Поле2 и Поле3, где первичный ключ (_id) равен 1.
Eclipse показывает мне красную линию прямо под словом «обновление» и дает мне следующее объяснение:
Обновление метода (String, ContentValues, String, String []) в типе SQLiteDatabase неприменимо для аргументов (String, String, String, null)
Полагаю, я неправильно назначаю ContentValues. Может кто-то указать мне верное направление?
myDB.update(TableName, cv, "_id=?", new String[]{id})
. SQLite автоматически подставит четвертый параметр в "?" в третьем параметре, то есть в предложении WHERE. Если ваш третий параметр содержит n "?", Четвертый параметр должен быть String [] длины nПростой способ:
String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue; myDataBase.execSQL(strSQL);
источник
execSQL()
для обновлений не сработает. Чтение execSQL () с UPDATE не обновляется .Сначала создайте объект ContentValues :
ContentValues cv = new ContentValues(); cv.put("Field1","Bob"); cv.put("Field2","19");
Тогда воспользуйтесь методом обновления. Обратите внимание, что третий аргумент - это предложение where. Знак "?" заполнитель. Он будет заменен четвертым аргументом (id)
myDB.update(MY_TABLE_NAME, cv, "_id = ?", new String[]{id});
Это наиболее чистое решение для обновления определенной строки.
источник
Этот код должен исправить ваш пример:
ContentValues data=new ContentValues(); data.put("Field1","bob"); data.put("Field2",19); data.put("Field3","male"); DB.update(Tablename, data, "_id=" + id, null);
источник
вы можете попробовать это ...
db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=6 ");
источник
надеюсь, это поможет вам:
public boolean updatedetails(long rowId, String address) { SQLiteDatabase mDb= this.getWritableDatabase(); ContentValues args = new ContentValues(); args.put(KEY_ROWID, rowId); args.put(KEY_ADDRESS, address); return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0; }
источник
Вы попробуете этот метод обновления в SQLite
int id; ContentValues con = new ContentValues(); con.put(TITLE, title); con.put(AREA, area); con.put(DESCR, desc); con.put(TAG, tag); myDataBase.update(TABLE, con, KEY_ID + "=" + id,null);
источник
используйте этот код в своей БД `
public boolean updatedetails(long rowId,String name, String address) { ContentValues args = new ContentValues(); args.put(KEY_ROWID, rowId); args.put(KEY_NAME, name); args.put(KEY_ADDRESS, address); int i = mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null); return i > 0; }
для обновления в вашем sample.java используйте этот код
//DB.open(); try{ //capture the data from UI String name = ((EditText)findViewById(R.id.name)).getText().toString().trim(); String address =(EditText)findViewById(R.id.address)).getText().toString().trim(); //open Db pdb.open(); //Save into DBS pdb.updatedetails(RowId, name, address); Toast.makeText(this, "Modified Successfully", Toast.LENGTH_SHORT).show(); pdb.close(); startActivity(new Intent(this, sample.class)); finish(); }catch (Exception e) { Log.e(TAG_AVV, "errorrrrr !!"); e.printStackTrace(); } pdb.close();
источник
Можно попробовать вот так:
ContentValues values=new ContentValues(); values.put("name","aaa"); values.put("publisher","ppp"); values.put("price","111"); int id=sqdb.update("table_name",values,"bookid='5' and booktype='comic'",null);
источник
если ваша строка sqlite имеет уникальный идентификатор или другой эквивалент, вы можете использовать предложение where, например
update .... where id = {here is your unique row id}
источник
"where _id = 1"
. Это изменение также отражено в моем вопросе.Для обновлений необходимо вызвать setTransactionSuccessfull, чтобы изменения были зафиксированы следующим образом:
db.beginTransaction(); try { db.update(...) db.setTransactionSuccessfull(); // changes get rolled back if this not called } finally { db.endTransaction(); // commit or rollback }
источник
// Вот простой пример кода для обновления
// Сначала объявим это
private DatabaseAppHelper dbhelper; private SQLiteDatabase db;
// инициализируем следующие
dbhelper=new DatabaseAppHelper(this); db=dbhelper.getWritableDatabase();
// код обновления
ContentValues values= new ContentValues(); values.put(DatabaseAppHelper.KEY_PEDNAME, ped_name); values.put(DatabaseAppHelper.KEY_PEDPHONE, ped_phone); values.put(DatabaseAppHelper.KEY_PEDLOCATION, ped_location); values.put(DatabaseAppHelper.KEY_PEDEMAIL, ped_emailid); db.update(DatabaseAppHelper.TABLE_NAME, values, DatabaseAppHelper.KEY_ID + "=" + ?, null);
// поставить ur id вместо «вопросительного знака» - это функция в моих общих предпочтениях.
источник
public void updateRecord(ContactModel contact) { database = this.getReadableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_FIRST_NAME, contact.getFirstName()); contentValues.put(COLUMN_LAST_NAME, contact.getLastName()); contentValues.put(COLUMN_NUMBER,contact.getNumber()); contentValues.put(COLUMN_BALANCE,contact.getBalance()); database.update(TABLE_NAME, contentValues, COLUMN_ID + " = ?", new String[]{contact.getID()}); database.close(); }
источник
просто попробуйте этот способ
String strFilter = "_id=" + Id; ContentValues args = new ContentValues(); args.put(KEY_TITLE, title); myDB.update("titles", args, strFilter, null);**
источник
Способ обновления в SQLite:
public void updateMethod(String name, String updatename){ String query="update students set email = ? where name = ?"; String[] selections={updatename, name}; Cursor cursor=db.rawQuery(query, selections); }
источник
SQLiteDatabase myDB = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(key1,value1); cv.put(key2,value2); /*All values are your updated values, here you are putting these values in a ContentValues object */ .................. .................. int val=myDB.update(TableName, cv, key_name +"=?", new String[]{value}); if(val>0) //Successfully Updated else //Updation failed
источник
public long fillDataTempo(String table){ String[] table = new String[1]; tabela[0] = table; ContentValues args = new ContentValues(); args.put(DBOpenHelper.DATA_HORA, new Date().toString()); args.put(DBOpenHelper.NOME_TABELA, nome_tabela); return db.update(DATABASE_TABLE, args, STRING + " LIKE ?" ,tabela); }
источник
просто укажите rowId и тип данных, которые будут обновляться в ContentValues.
public void updateStatus (String id, int status) {
SQLiteDatabase db = this.getWritableDatabase ();
Данные ContentValues = новые ContentValues ();
data.put («статус», статус);
db.update (TableName, data, "columnName" + "=" + id, null);
}
источник
Продемонстрирую на полном примере
Создайте свою базу данных таким образом
import android.content.Context import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { override fun onCreate(db: SQLiteDatabase) { val createProductsTable = ("CREATE TABLE " + Business.TABLE + "(" + Business.idKey + " INTEGER PRIMARY KEY AUTOINCREMENT ," + Business.KEY_a + " TEXT, " + Business.KEY_b + " TEXT, " + Business.KEY_c + " TEXT, " + Business.KEY_d + " TEXT, " + Business.KEY_e + " TEXT )") db.execSQL(createProductsTable) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { // Drop older table if existed, all data will be gone!!! db.execSQL("DROP TABLE IF EXISTS " + Business.TABLE) // Create tables again onCreate(db) } companion object { //version number to upgrade database version //each time if you Add, Edit table, you need to change the //version number. private val DATABASE_VERSION = 1 // Database Name private val DATABASE_NAME = "business.db" } }
Затем создайте класс для упрощения CRUD -> Создать | Прочитать | Обновить | Удалить
class Business { var a: String? = null var b: String? = null var c: String? = null var d: String? = null var e: String? = null companion object { // Labels table name const val TABLE = "Business" // Labels Table Columns names const val rowIdKey = "_id" const val idKey = "id" const val KEY_a = "a" const val KEY_b = "b" const val KEY_c = "c" const val KEY_d = "d" const val KEY_e = "e" } }
Теперь приходит волшебство
import android.content.ContentValues import android.content.Context class SQLiteDatabaseCrud(context: Context) { private val dbHelper: DBHelper = DBHelper(context) fun updateCart(id: Int, mBusiness: Business) { val db = dbHelper.writableDatabase val valueToChange = mBusiness.e val values = ContentValues().apply { put(Business.KEY_e, valueToChange) } db.update(Business.TABLE, values, "id=$id", null) db.close() // Closing database connection } }
вы должны создать свой ProductsAdapter, который должен возвращать CursorAdapter
Поэтому в действии просто вызовите функцию, подобную этой
internal var cursor: Cursor? = null internal lateinit var mProductsAdapter: ProductsAdapter mSQLiteDatabaseCrud = SQLiteDatabaseCrud(this) try { val mBusiness = Business() mProductsAdapter = ProductsAdapter(this, c = todoCursor, flags = 0) lstProducts.adapter = mProductsAdapter lstProducts.onItemClickListener = OnItemClickListener { parent, view, position, arg3 -> val cur = mProductsAdapter.getItem(position) as Cursor cur.moveToPosition(position) val id = cur.getInt(cur.getColumnIndexOrThrow(Business.idKey)) mBusiness.e = "this will replace the 0 in a specific position" mSQLiteDatabaseCrud?.updateCart(id ,mBusiness) } cursor = dataBaseMCRUD!!.productsList mProductsAdapter.swapCursor(cursor) } catch (e: Exception) { Log.d("ExceptionAdapter :",""+e) }
источник