Удаление строки в SQLite в Android - PullRequest
93 голосов
/ 22 сентября 2011

Это может быть глупый вопрос, но я новичок в SQLite и не могу понять это. У меня есть 1 таблица, которая имеет столбцы KEY_ROWID, KEY_NAME, KAY_LATITUDE и KEY_LONGITUDE. Я хочу, чтобы пользователь мог выбрать один и удалить его; Кто-нибудь может дать мне направление, чтобы начать? Мой вопрос заключается в фактическом удалении строки с указанием только ее имени.

Соответствующий код:

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

Ответы [ 16 ]

170 голосов
/ 22 сентября 2011

Вы можете попробовать вот так:

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

или

public boolean deleteTitle(String name) 
{
    return db.delete(DATABASE_TABLE, KEY_NAME + "=?", new String[]{name}) > 0;
}
156 голосов
/ 22 сентября 2011

Попробуй так, можешь ли ты получить свое решение

String table = "beaconTable";
String whereClause = "_id=?";
String[] whereArgs = new String[] { String.valueOf(row) };
db.delete(table, whereClause, whereArgs);
55 голосов
/ 04 мая 2015

лучше тоже использовать whereargs;

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

это похоже на использование этой команды:

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

и использование функции удаления таким образом хорошо, потому что она удаляет инъекции sql.

17 голосов
/ 22 сентября 2011

Пока я не понимаю ваш вопрос, вы хотите поставить два условия, чтобы выбрать строку для удаления. Для этого вам нужно сделать:

13 голосов
/ 06 апреля 2016

Попробуйте этот код

public void deleteRow(String value)
{
SQLiteDatabase db = this.getWritableDatabase();       
db.execSQL("DELETE FROM " + TABLE_NAME+ " WHERE "+COlUMN_NAME+"='"+value+"'");
db.close();
}
8 голосов
/ 07 февраля 2013

Попробуйте этот код ...

private static final String mname = "'USERNAME'";
public void deleteContact()
{
    db.delete(TABLE_CONTACTS, KEY_NAME + "=" + mname, null);
}
5 голосов
/ 27 апреля 2012

Это прекрасно работает:

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

Вы также можете обратиться к этому примеру .

2 голосов
/ 29 марта 2018

Чтобы удалить строки из таблицы, необходимо предоставить критерии выбора, которые идентифицируют строки для метода delete(). Механизм работает так же, как аргументы выбора для метода query(). Он делит спецификацию выбора на предложение выбора (предложение where) и аргументы выбора.

    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.

Возвращаемое значение для метода delete() указывает количество строк, которые были удалены из базы данных.

2 голосов
/ 16 декабря 2016

если вы используете SQLiteDatabase , тогда существует метод удаления

Определение удаления

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

Пример реализации

Теперь мы можем написать метод с именем delete с аргументом в качестве имени

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

, если вы хотите удалить все записи , а затем простопередайте значение null вышеприведенному методу

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

Источник информации

2 голосов
/ 29 июля 2015

Ребята, это универсальный метод, который вы можете использовать для всех ваших столов, отлично сработал в моем случае.

public void deleteRowFromTable(String tableName, String columnName, String keyValue) {
    String whereClause = columnName + "=?";
    String[] whereArgs = new String[]{String.valueOf(keyValue)};
    yourDatabase.delete(tableName, whereClause, whereArgs);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...