Saya sudah mencoba memperbarui baris tertentu untuk sementara waktu sekarang, dan tampaknya ada dua cara untuk melakukan ini. Dari apa yang saya baca dan coba, Anda bisa menggunakan:
execSQL(String sql)
metode
atau:
update(String table, ContentValues values, String whereClause, String[] whereArgs)
metode.
(Beri tahu saya jika ini salah karena saya baru mengenal android dan sangat baru mengenal SQL.)
Jadi biarkan saya mendapatkan kode saya yang sebenarnya.
myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null);
Saya mencoba untuk mencapai ini:
Perbarui Bidang1, Bidang2, dan Bidang3 di mana kunci utama (_id) sama dengan 1.
Eclipse memberi saya garis merah tepat di bawah kata "update" dan memberi saya penjelasan ini:
Pembaruan metode (String, ContentValues, String, String []) dalam tipe SQLiteDatabase tidak berlaku untuk argumen (String, String, String, null)
Saya rasa saya tidak menetapkan ContentValues dengan benar. Adakah yang bisa mengarahkan saya ke arah yang benar?
myDB.update(TableName, cv, "_id=?", new String[]{id})
. SQLite akan secara otomatis mengisi parameter keempat ke dalam "?" di parameter ketiga, yaitu klausa WHERE. Jika parameter ketiga Anda berisi n "?" S, parameter keempat harus berupa String [] dengan panjang nCara sederhana:
String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue; myDataBase.execSQL(strSQL);
sumber
execSQL()
untuk pembaruan tidak akan berfungsi. Baca execSQL () dengan UPDATE tidak diperbarui .Pertama-tama buat objek ContentValues :
ContentValues cv = new ContentValues(); cv.put("Field1","Bob"); cv.put("Field2","19");
Kemudian gunakan metode pembaruan. Catatan, argumen ketiga adalah klausa where. The "?" adalah placeholder. Ini akan diganti dengan argumen keempat (id)
myDB.update(MY_TABLE_NAME, cv, "_id = ?", new String[]{id});
Ini adalah solusi terbersih untuk memperbarui baris tertentu.
sumber
Kode ini harus memperbaiki contoh Anda:
ContentValues data=new ContentValues(); data.put("Field1","bob"); data.put("Field2",19); data.put("Field3","male"); DB.update(Tablename, data, "_id=" + id, null);
sumber
kamu bisa mencoba ini ...
db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=6 ");
sumber
semoga ini membantu Anda:
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; }
sumber
Anda mencoba metode pembaruan yang satu ini di 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);
sumber
gunakan kode ini di DB Anda `
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; }
untuk memperbarui di sample.java Anda menggunakan kode ini
//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();
sumber
Bisa coba seperti ini:
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);
sumber
jika baris sqlite Anda memiliki id unik atau ekuivalen lainnya, Anda dapat menggunakan klausa where, seperti ini
update .... where id = {here is your unique row id}
sumber
"where _id = 1"
. Perubahan juga tercermin dalam pertanyaan saya juga.Untuk pembaruan, perlu memanggil setTransactionSuccessfull agar perubahan dapat dilakukan seperti:
db.beginTransaction(); try { db.update(...) db.setTransactionSuccessfull(); // changes get rolled back if this not called } finally { db.endTransaction(); // commit or rollback }
sumber
// Berikut ini beberapa contoh kode sederhana untuk pembaruan
// Pertama-tama nyatakan ini
private DatabaseAppHelper dbhelper; private SQLiteDatabase db;
// inisialisasi berikut ini
dbhelper=new DatabaseAppHelper(this); db=dbhelper.getWritableDatabase();
// kode pembaruan
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);
// letakkan id ur alih-alih 'tanda tanya' adalah fungsi dalam preferensi bersama saya.
sumber
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(); }
sumber
coba saja cara ini
String strFilter = "_id=" + Id; ContentValues args = new ContentValues(); args.put(KEY_TITLE, title); myDB.update("titles", args, strFilter, null);**
sumber
Metode pembaruan di 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); }
sumber
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
sumber
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); }
sumber
berikan saja rowId dan jenis data yang akan diperbarui di ContentValues.
public void updateStatus (String id, int status) {
SQLiteDatabase db = this.getWritableDatabase ();
Data ContentValues = new ContentValues ();
data.put ("status", status);
db.update (TableName, data, "columnName" + "=" + id, null);
}
sumber
Saya akan mendemonstrasikan dengan contoh lengkap
Buat database Anda dengan cara ini
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" } }
Kemudian buat kelas untuk memfasilitasi CRUD -> Create | Read | Update | Hapus
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" } }
Sekarang datang keajaiban
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 } }
Anda harus membuat ProductsAdapter yang harus mengembalikan CursorAdapter
Jadi dalam suatu aktivitas panggil saja fungsinya seperti ini
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) }
sumber