Eliminazione di righe in SQLite in Android

Questa potrebbe essere una domanda stupida, ma sono nuovo di SQLite e non riesco a capirlo. Ho una tabella che contiene le colonne KEY_ROWID , KEY_NAME , KAY_LATITUDE e KEY_LONGITUDE . Voglio che l’utente sia in grado di selezionarne uno ed eliminarlo; Qualcuno può darmi una direzione per iniziare? La mia domanda è nella cancellazione effettiva della riga dato solo il suo nome.

Codice pertinente:

 public class BeaconDatabase { public static final String KEY_ROWID = "_id"; public static final String KEY_NAME = "beacon_name"; public static final String KEY_LATITUDE = "beacon_lat"; public static final String KEY_LONGITUDE = "beacon_lon"; private static final String DATABASE_NAME ="BeaconDatabase"; private static final String DATABASE_TABLE ="beaconTable"; private static final int DATABASE_VERSION = 1; private DbHelper helper; private final Context context; private SQLiteDatabase db; public BeaconDatabase(Context context) { this.context = context; } public BeaconDatabase open() { helper = new DbHelper(this.context); db = helper.getWritableDatabase(); return this; } public void close() { helper.close(); } public long createEntry(String name, Double lat, Double lon) { ContentValues cv = new ContentValues(); cv.put(KEY_NAME, name); cv.put(KEY_LATITUDE, lat); cv.put(KEY_LONGITUDE, lon); return db.insert(DATABASE_TABLE, null, cv); } public void deleteEntry(long row) { // Deletes a row given its rowId, but I want to be able to pass // in the name of the KEY_NAME and have it delete that row. //db.delete(DATABASE_TABLE, KEY_ROWID + "=" + row, null); } public String getData() { String[] columns = { KEY_ROWID, KEY_NAME, KEY_LATITUDE, KEY_LONGITUDE }; Cursor cursor = db.query(DATABASE_TABLE, columns, null, null, null, null, null); String result = ""; int iRow = cursor.getColumnIndex(KEY_ROWID); int iName = cursor.getColumnIndex(KEY_NAME); int iLat = cursor.getColumnIndex(KEY_LATITUDE); int iLon = cursor.getColumnIndex(KEY_LONGITUDE); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { result += cursor.getString(iRow) + ": " + cursor.getString(iName) + " - " + cursor.getDouble(iLat) + " latitude " + cursor.getDouble(iLon) + " longitude\n"; } return result; } private static class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME + " TEXT NOT NULL, " + KEY_LATITUDE + " DOUBLE, " + KEY_LONGITUDE + " DOUBLE);" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); onCreate(db); } } } 

Puoi provare in questo modo:

  //---deletes a particular title--- public boolean deleteTitle(String name) { return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null) > 0; } 

Prova in questo modo potresti ottenere la soluzione

 String table = "beaconTable"; String whereClause = "_id=?"; String[] whereArgs = new String[] { String.valueOf(row) }; db.delete(table, whereClause, whereArgs); 

è meglio usare anche whereargs;

 db.delete("tablename","id=? and name=?",new String[]{"1","jack"}); 

questo è come usare questo comando:

 delete from tablename where id='1' and name ='jack' 

e usare la funzione di cancellazione in questo modo è buono perché rimuove le iniezioni SQL.

Finché non capisco la tua domanda, vuoi mettere due condizioni per selezionare una riga da cancellare.Per quello, devi fare:

 public void deleteEntry(long row,String key_name) { db.delete(DATABASE_TABLE, KEY_ROWID + "=" + row + " and " + KEY_NAME + "=" + key_name, null); /*if you just have key_name to select a row,you can ignore passing rowid(here-row) and use: db.delete(DATABASE_TABLE, KEY_NAME + "=" + key_name, null); */ } 

Prova questo codice

 public void deleteRow(String value) { SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("DELETE FROM " + TABLE_NAME+ " WHERE "+COlUMN_NAME+"='"+value+"'"); db.close(); } 

Prova questo codice …

 private static final String mname = "'USERNAME'"; public void deleteContact() { db.delete(TABLE_CONTACTS, KEY_NAME + "=" + mname, null); } 

Questo funziona perfettamente:

 public boolean deleteSingleRow(String rowId) { return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } 

Puoi anche fare riferimento a questo esempio .

Ragazzi, questo è un metodo generico che potete usare per tutti i vostri tavoli, perfettamente funzionante nel mio caso.

 public void deleteRowFromTable(String tableName, String columnName, String keyValue) { String whereClause = columnName + "=?"; String[] whereArgs = new String[]{String.valueOf(keyValue)}; yourDatabase.delete(tableName, whereClause, whereArgs); } 

Ragazzi se le soluzioni di cui sopra non funzionano per voi, provate anche questo perché ha funzionato per me.

 public boolean deleteRow(String name) { return db.delete(DATABASE_TABLE, KEY_NAME + "='" + name +"' ;", null) > 0; } 

se si utilizza SQLiteDatabase, esiste un metodo di eliminazione

Definizione di Elimina

 int delete (String table, String whereClause, String[] whereArgs) 

Esempio di implementazione

Ora possiamo scrivere un metodo chiamato delete con argomento come nome

 public void delete(String value) { db.delete(DATABASE_TABLE, KEY_NAME + "=?", new String[]{String.valueOf(value)}); } 

se si desidera eliminare tutti i record, passare semplicemente null al metodo precedente,

 public void delete() { db.delete(DATABASE_TABLE, null, null); } 

Fonte d’informazione

  SQLiteDatabase db = this.getWritableDatabase(); // Define 'where' part of query. String selection = Contract.COLUMN_COMPANY_ID + " =? and " + Contract.CLOUMN_TYPE +" =? "; // Specify arguments in placeholder order. String[] selectionArgs = { cid,mode }; // Issue SQL statement. int deletedRows = db.delete(Contract.TABLE_NAME, selection, selectionArgs); return deletedRows;// no.of rows deleted. 

Prova questo:

 public void deleteEntry(long rowId) { database.delete(DATABASE_TABLE , KEY_ROWID + " = " + rowId, null);} 
 public boolean deleteRow(long l) { String where = "ID" + "=" + l; return db.delete(TABLE_COUNTRY, where, null) != 0; } 

Puoi fare qualcosa del genere, condividendo il mio snippet di codice funzionante

Assicurati che la query sia come questa

DELETE FROM tableName WHERE KEY__NAME = ‘parameterToMatch’

 public void removeSingleFeedback(InputFeedback itemToDelete) { //Open the database SQLiteDatabase database = this.getWritableDatabase(); //Execute sql query to remove from database //NOTE: When removing by String in SQL, value must be enclosed with '' database.execSQL("DELETE FROM " + TABLE_FEEDBACKS + " WHERE " + KEY_CUSTMER_NAME + "= '" + itemToDelete.getStrCustName() + "'" + " AND " + KEY_DESIGNATION + "= '" + itemToDelete.getStrCustDesignation() + "'" + " AND " + KEY_EMAIL + "= '" + itemToDelete.getStrCustEmail() + "'" + " AND " + KEY_CONTACT_NO + "= '" + itemToDelete.getStrCustContactNo() + "'" + " AND " + KEY_MOBILE_NO + "= '" + itemToDelete.getStrCustMobile() + "'" + " AND " + KEY_CLUSTER_NAME + "= '" + itemToDelete.getStrClusterName() + "'" + " AND " + KEY_PRODUCT_NAME + "= '" + itemToDelete.getStrProductName() + "'" + " AND " + KEY_INSTALL_VERSION + "= '" + itemToDelete.getStrInstalledVersion() + "'" + " AND " + KEY_REQUIREMENTS + "= '" + itemToDelete.getStrRequirements() + "'" + " AND " + KEY_CHALLENGES + "= '" + itemToDelete.getStrChallenges() + "'" + " AND " + KEY_EXPANSION + "= '" + itemToDelete.getStrFutureExpansion() + "'" + " AND " + KEY_COMMENTS + "= '" + itemToDelete.getStrComments() + "'" ); //Close the database database.close(); } 

Prova il codice seguente-

 mSQLiteDatabase = getWritableDatabase();//To delete , database should be writable. int rowDeleted = mSQLiteDatabase.delete(TABLE_NAME,id + " =?", new String[] {String.valueOf(id)}); mSQLiteDatabase.close();//This is very important once database operation is done. if(rowDeleted != 0){ //delete success. } else { //delete failed. } 

Funziona alla grande!

 public void deleteNewMelk(String melkCode) { getWritableDatabase().delete(your_table, your_column +"=?", new String[]{melkCode}); }