Android中的SQLite如何更新特定的行

我一直在尝试更新一段时间的特定行,似乎有两种方法来做到这一点。 从我读过的和尝试过的,你可以使用:

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

我正试图完成这一点:

更新主键(_id)等于1的Field1,Field2和Field3。

Eclipse给我一个红线在“更新”一词的下面,给了我这个解释:

typesSQLiteDatabase中的方法update(String,ContentValues,String,String [])不适用于参数(String,String,String,null)

我猜我没有正确分配ContentValues。 任何人都可以指向正确的方向吗?

首先制作一个ContentValues对象:

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

然后使用更新方法,它现在应该工作:

 myDB.update(TableName, cv, "_id="+id, null); 

简单的方法:

 String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue; myDataBase.execSQL(strSQL); 
  1. 为了方便起见,我亲自推荐更新。 但execsql将工作相同。
  2. 你猜对了问题就是你的内容价值。 您应该创build一个ContentValue对象,并将您的数据库行的值放在那里。

这段代码应该修复你的例子:

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

首先创build一个ContentValues对象:

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

然后使用更新方法。 请注意,第三个参数是where子句。 “?” 是一个占位符。 它将被replace为第四个参数(id)

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

这是清理解决scheme来更新特定的行。

你可以试试这个…

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

在你的数据库中使用这个代码`

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

你在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 address) { ContentValues args = new ContentValues(); args.put(KEY_ROWID, rowId); args.put(KEY_ADDRESS, address); mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0; } 

如果你的sqlite行有一个唯一的ID或其他equivatent,你可以使用where子句,就像这样

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

//这里有一些简单的示例代码来更新

//首先声明这一点

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

/ /把我的共享首选项中的一个函数,而不是“问号”我的身份证。

可以这样试试:

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

试试这个方法

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

对于更新,需要调用setTransactionSuccessfull才能获得提交,如下所示:

 db.beginTransaction(); try { db.update(...) db.setTransactionSuccessfull(); // changes get rolled back if this not called } finally { db.endTransaction(); // commit or rollback } 
 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); } 
  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(); }