To może być głupie pytanie, ale jestem nowy w SQLite i nie mogę tego zrozumieć. Mam 1 tabeli zawierającej kolumny KEY_ROWID
, KEY_NAME
, KAY_LATITUDE
, i KEY_LONGITUDE
. Chcę, aby użytkownik mógł wybrać jedną i usunąć ją; Czy ktoś może mi wskazać kierunek, w którym powinienem zacząć? Moje pytanie dotyczy faktycznego usunięcia wiersza, podając tylko jego nazwę.
Odpowiedni kod:
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);
}
}
}
android
sqlite
delete-row
corresponding-records
roboguy12
źródło
źródło
Odpowiedzi:
Możesz spróbować tak:
lub
źródło
name = "TRUE; <any SQL command>;"
=> „dowolne polecenie SQL” zostanie wykonane. Oczywiście nie stanowi to problemu, jeśli nie ma GUI dla tej funkcji.Spróbuj w ten sposób, może znajdziesz rozwiązanie
źródło
lepiej jest też użyć whereargs;
to jest jak użycie tego polecenia:
a używanie funkcji delete w taki sposób jest dobre, ponieważ usuwa iniekcje sql.
źródło
whereargs
.id=?
składni w PHP i wygląda to bardzo podobnie.Dopóki nie zrozumiem twojego pytania, chcesz postawić dwa warunki, aby wybrać wiersz do usunięcia. W tym celu musisz zrobić:
źródło
Wypróbuj ten kod
źródło
Wypróbuj ten kod ...
źródło
Działa to doskonale:
Możesz również odwołać się do tego przykładu .
źródło
jeśli używasz SQLiteDatabase, istnieje metoda usuwania
Definicja usunięcia
Przykładowe wdrożenie
Teraz możemy napisać metodę o nazwie delete z argumentem jako nazwą
jeśli chcesz usunąć wszystkie rekordy, po prostu przekaż null do powyższej metody,
Źródło informacji
źródło
Chłopaki, to jest ogólna metoda, której możesz użyć dla wszystkich swoich tabel, zadziałała idealnie w moim przypadku.
źródło
Aby usunąć wiersze z tabeli, musisz podać kryteria wyboru, które identyfikują wiersze w
delete()
metodzie. Mechanizm działa tak samo, jak argumenty wyboruquery()
metody. Dzieli specyfikację selekcji na klauzulę selekcyjną (klauzula gdzie) i argumenty selekcji.Wartość zwracana dla
delete()
metody wskazuje liczbę wierszy, które zostały usunięte z bazy danych.źródło
Chłopaki, jeśli powyższe rozwiązania nie działają dla ciebie, wypróbuj to również, ponieważ zadziałało dla mnie.
źródło
Działa świetnie!
źródło
Spróbuj tego:
źródło
źródło
Możesz zrobić coś takiego, udostępniając mój działający fragment kodu
Upewnij się, że zapytanie jest takie
źródło
Wypróbuj poniższy kod-
źródło
Jedynym sposobem, który działał dla mnie, był ten
źródło