SQLite in Android How to update a specific row

JavaAndroidSqlEclipseSqlite

Java Problem Overview


I've been trying to update a specific row for a while now, and it seems that there are two ways to do this. From what I've read and tried, you can just use the:

execSQL(String sql) method

or the:

update(String table, ContentValues values, String whereClause, String[] whereArgs) method.

(Let me know if this is incorrect as I am new to android and very new to SQL.)

So let me get to my actual code.

myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null);

I am trying to accomplish this:

Update Field1, Field2, and Field3 where the primary key (_id) is equal to 1.

Eclipse gives me a red line right underneath the word "update" and gives me this explanation:

> The method update(String, ContentValues, String, String[]) in the type > SQLiteDatabase is not applicable for the arguments (String, String, > String, null)

I'm guessing I'm not assigning the ContentValues correctly. Can anyone point me in the right direction?

Java Solutions


Solution 1 - Java

First make a ContentValues object :

ContentValues cv = new ContentValues();
cv.put("Field1","Bob"); //These Fields should be your String values of actual column names
cv.put("Field2","19");
cv.put("Field2","Male");

Then use the update method, it should work now:

myDB.update(TableName, cv, "_id = ?", new String[]{id});

Solution 2 - Java

Simple way:

String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;

myDataBase.execSQL(strSQL);

Solution 3 - Java

At first create a ContentValues object :

ContentValues cv = new ContentValues();
cv.put("Field1","Bob");
cv.put("Field2","19");

Then use the update method. Note, the third argument is the where clause. The "?" is a placeholder. It will be replaced with the fourth argument (id)

myDB.update(MY_TABLE_NAME, cv, "_id = ?", new String[]{id});

This is the cleanest solution to update a specific row.

Solution 4 - Java

  1. I personally prefere .update for its convenience. But execsql will work same.
  2. You are right with your guess that the problem is your content values. You should create a ContentValue Object and put the values for your database row there.

This code should fix your example:

 ContentValues data=new ContentValues();
 data.put("Field1","bob");
 data.put("Field2",19);
 data.put("Field3","male");
 DB.update(Tablename, data, "_id=" + id, null);

Solution 5 - Java

you can try this...

db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=6 ");

Solution 6 - Java

hope this'll help you:

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;   
 }

Solution 7 - Java

You try this one update method in 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);

Solution 8 - Java

use this code in your DB `

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;
     }

for updating in your sample.java use this code

  //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();

Solution 9 - Java

Can try like this:

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);

Solution 10 - Java

if your sqlite row has a unique id or other equivatent, you can use where clause, like this

update .... where id = {here is your unique row id}

Solution 11 - Java

For updates, need to call setTransactionSuccessfull for changes to get committed like so:

db.beginTransaction();
try {
    db.update(...) 
    db.setTransactionSuccessfull(); // changes get rolled back if this not called
} finally {
   db.endTransaction(); // commit or rollback
}

Solution 12 - Java

//Here is some simple sample code for update

//First declare this

private DatabaseAppHelper dbhelper;
private SQLiteDatabase db;

//initialize the following

dbhelper=new DatabaseAppHelper(this);
		db=dbhelper.getWritableDatabase();

//updation code

 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);

//put ur id instead of the 'question mark' is a function in my shared preference.

Solution 13 - Java

 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();
}

Solution 14 - Java

just try this way

  String strFilter = "_id=" + Id;
  ContentValues args = new ContentValues();
  args.put(KEY_TITLE, title);
  myDB.update("titles", args, strFilter, null);**

Solution 15 - Java

Method for updation in 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);
}

Solution 16 - Java

I will demonstrate with a complete example

Create your database this way

    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"
		}
	}

Then create a class to facilitate CRUD -> Create|Read|Update|Delete

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"
	}
}

Now comes the magic

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
		}
	}

you must create your ProductsAdapter which must return a CursorAdapter

So in an activity just call the function like this

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)
    }

enter image description here

Solution 17 - Java

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

Solution 18 - Java

Here I have completed this kind of code for update the row of a database, this is the code of Database handler class

public Boolean updateData(String id,String name,String age,String gender){
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(ID,id);
    contentValues.put(NAME,name);
    contentValues.put(AGE,age);
    contentValues.put(GENDER,gender);

    sqLiteDatabase.update(TABLE_NAME,contentValues,ID+"= ?",new String[]{id});
    return true;           //Boolean value return korbe
}

Solution 19 - Java

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);
}

Solution 20 - Java

just give rowId and type of data that is going to be update in ContentValues.

public void updateStatus(String id , int status){

SQLiteDatabase db = this.getWritableDatabase();

ContentValues data = new ContentValues();

data.put("status", status);

db.update(TableName, data, "columnName" + " = "+id , null);

}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEGHDKView Question on Stackoverflow
Solution 1 - JavaAkhilView Answer on Stackoverflow
Solution 2 - JavaYaqub AhmadView Answer on Stackoverflow
Solution 3 - JavafuncoderView Answer on Stackoverflow
Solution 4 - JavaKarlKarlsomView Answer on Stackoverflow
Solution 5 - JavaMurugan.PView Answer on Stackoverflow
Solution 6 - JavasachiView Answer on Stackoverflow
Solution 7 - JavaAndroidView Answer on Stackoverflow
Solution 8 - JavaRahul BaradiaView Answer on Stackoverflow
Solution 9 - JavaAmirView Answer on Stackoverflow
Solution 10 - JavamcxiaokeView Answer on Stackoverflow
Solution 11 - JavaFracdroidView Answer on Stackoverflow
Solution 12 - JavaMainak MukherjeeView Answer on Stackoverflow
Solution 13 - JavaNicksView Answer on Stackoverflow
Solution 14 - JavaSatyamView Answer on Stackoverflow
Solution 15 - JavaMuhammad Raza SaeedView Answer on Stackoverflow
Solution 16 - JavaAllanRibasView Answer on Stackoverflow
Solution 17 - JavaRafiView Answer on Stackoverflow
Solution 18 - JavaMinhajul Islam NiloyView Answer on Stackoverflow
Solution 19 - JavaJoão RosaView Answer on Stackoverflow
Solution 20 - JavaSanjay GoswamiView Answer on Stackoverflow