una - Eliminar fila en SQLite en Android
select sqlite android studio (16)
Esta podría ser una pregunta tonta, pero soy nuevo en SQLite y parece que no puedo resolver esto. Tengo 1 tabla que tiene columnas KEY_ROWID
, KEY_NAME
, KAY_LATITUDE
y KEY_LONGITUDE
. Quiero que el usuario pueda seleccionar uno y eliminarlo; ¿Alguien puede darme una dirección para comenzar? Mi pregunta está en la eliminación real de la fila, solo con su nombre.
Código relevante:
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);
}
}
}
Prueba este código
public void deleteRow(String value)
{
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE FROM " + TABLE_NAME+ " WHERE "+COlUMN_NAME+"=''"+value+"''");
db.close();
}
Chicos esto es un método genérico que puede usar para todas sus tablas, Funcionó perfectamente en mi 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);
}
Chicos, si las soluciones anteriores no funcionan para ustedes, prueben esta también porque funcionó para mí.
public boolean deleteRow(String name)
{
return db.delete(DATABASE_TABLE, KEY_NAME + "=''" + name +"'' ;", null) > 0;
}
Esto funciona perfectamente:
public boolean deleteSingleRow(String rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
También puedes referirte a este ejemplo .
Hasta que entiendo su pregunta, quiere poner dos condiciones para seleccionar una fila que se eliminará. Para eso, debe hacer:
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);
*/
}
Prueba así puedes obtener tu solución
String table = "beaconTable";
String whereClause = "_id=?";
String[] whereArgs = new String[] { String.valueOf(row) };
db.delete(table, whereClause, whereArgs);
Prueba este código ...
private static final String mname = "''USERNAME''";
public void deleteContact()
{
db.delete(TABLE_CONTACTS, KEY_NAME + "=" + mname, null);
}
Prueba este:
public void deleteEntry(long rowId) {
database.delete(DATABASE_TABLE , KEY_ROWID
+ " = " + rowId, null);}
Pruebe el siguiente código:
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.
}
Puedes hacer algo como esto, compartir mi fragmento de código de trabajo
Asegúrese de que la consulta sea así
ELIMINAR DE 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();
}
Puedes intentarlo así:
//---deletes a particular title---
public boolean deleteTitle(String name)
{
return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null) > 0;
}
es mejor usar lugares también;
db.delete("tablename","id=? and name=?",new String[]{"1","jack"});
esto es como usar este comando:
delete from tablename where id=''1'' and name =''jack''
y usar la función de eliminación de esa manera es bueno porque elimina las inyecciones de sql.
si está utilizando SQLiteDatabase, entonces hay un método de eliminación
Definición de Eliminar
int delete (String table, String whereClause, String[] whereArgs)
Ejemplo de implementación
Ahora podemos escribir un método llamado eliminar con argumento como nombre
public void delete(String value) {
db.delete(DATABASE_TABLE, KEY_NAME + "=?", new String[]{String.valueOf(value)});
}
si desea eliminar todos los registros , simplemente pase null al método anterior,
public void delete() {
db.delete(DATABASE_TABLE, null, null);
}
¡Funciona genial!
public void deleteNewMelk(String melkCode) {
getWritableDatabase().delete(your_table, your_column +"=?", new String[]{melkCode});
}
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.
public boolean deleteRow(long l) {
String where = "ID" + "=" + l;
return db.delete(TABLE_COUNTRY, where, null) != 0;
}