web-dev-qa-db-fra.com

SQLite dans Android Comment mettre à jour une ligne spécifique

J'essaie de mettre à jour une ligne spécifique depuis un moment et il semble qu'il existe deux façons de procéder. D'après ce que j'ai lu et essayé, vous pouvez simplement utiliser le:

execSQL(String sql) méthode 

ou la:

update(String table, ContentValues values, String whereClause, String[] whereArgs), méthode.

(Faites-moi savoir si cela est incorrect car je suis nouveau sur Android et très nouveau sur SQL.)

Alors laissez-moi arriver à mon code actuel.

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

J'essaie d'accomplir ceci:

Mettez à jour Field1, Field2 et Field3 où la clé primaire (_id) est égale à 1.

Eclipse me donne une ligne rouge juste sous le mot "update" et me donne cette explication:

La méthode update (String, ContentValues, String, String []) dans le type SQLiteDatabase n'est pas applicable pour les arguments (String, String, String, null)

J'imagine que je n'attribue pas correctement les ContentValues. Est-ce que quelqu'un peut-il me montrer la bonne direction?

121
EGHDK

Commencez par créer un objet 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");

Puis utilisez la méthode update, cela devrait fonctionner maintenant:

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

Manière simple:

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

myDataBase.execSQL(strSQL);
47
Yaqub Ahmad

Au début, créez un ContentValues ​​object:

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

Ensuite, utilisez la méthode de mise à jour. Notez que le troisième argument est la clause where. Le "?" est un espace réservé. Il sera remplacé par le quatrième argument (id)

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

C'est la solution de nettoyage pour mettre à jour une ligne spécifique.

33
funcoder
  1. Je préfère personnellement .update pour sa commodité. Mais execsql fonctionnera de la même manière. 
  2. Vous avez raison de supposer que le problème réside dans vos valeurs de contenu. Vous devez créer un objet ContentValue et y placer les valeurs de la ligne de votre base de données.

Ce code devrait corriger votre exemple:

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

tu peux essayer ça ...

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

utilisez ce code dans votre base de données ` 

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

pour la mise à jour dans votre échantillon.Java utilise ce 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();
5
Rahul Baradia

espérons que cela vous aidera:

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

Vous essayez cette méthode de mise à jour dans 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);
4
Android

Peut essayer comme ça:

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);
3
Amir john

Pour les mises à jour, vous devez appeler setTransactionSuccessfull pour que les modifications soient validées de la manière suivante:

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

// Voici un exemple de code simple pour la mise à jour 

// déclare d'abord ceci

private DatabaseAppHelper dbhelper;
private SQLiteDatabase db;

// initialise le suivant

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

// code de mise à jour

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

// mettre ur id au lieu du "point d'interrogation" est une fonction dans mes préférences communes.

2
Mainak Mukherjee

si votre ligne sqlite a un identifiant unique ou un autre équivalent, vous pouvez utiliser la clause where, comme ceci

update .... where id = {here is your unique row id}
2
mcxiaoke
 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();
}
2
sumit mehra

juste essayer de cette façon

  String strFilter = "_id=" + Id;
  ContentValues args = new ContentValues();
  args.put(KEY_TITLE, title);
  myDB.update("titles", args, strFilter, null);**
1
Satyam
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);
}
0
João Rosa

Méthode de mise à jour dans 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);
}
0