这可能是一个愚蠢的问题,但我是新来的SQLite,我似乎无法想出解决办法。我有1表,该表中的列 KEY_ROWID
, KEY_NAME
, KAY_LATITUDE
和 KEY_LONGITUDE
。我希望用户能够选择一个并删除它;谁能给我一个方向开始?我的问题是只给出它的名字行的实际删除。
相关code:
公共类BeaconDatabase {
公共静态最后弦乐KEY_ROWID =_id;
公共静态最后弦乐KEY_NAME =beacon_name;
公共静态最后弦乐KEY_LATITUDE =beacon_lat;
公共静态最后弦乐KEY_LONGITUDE =beacon_lon;
私有静态最后弦乐DATABASE_NAME =BeaconDatabase;
私有静态最后弦乐DATABASE_TABLE =beaconTable;
私有静态最终诠释DATABASE_VERSION = 1;
私人DbHelper帮手;
私人最终上下文的背景下;
私人SQLiteDatabase分贝;
公共BeaconDatabase(上下文的背景下){
this.context =背景;
}
公共BeaconDatabase的open(){
辅助=新DbHelper(this.context);
DB = helper.getWritableDatabase();
回到这一点;
}
公共无效的close(){
helper.close();
}
众长createEntry(字符串名称,双纬度,双LON){
ContentValues CV =新ContentValues();
cv.put(KEY_NAME,姓名);
cv.put(KEY_LATITUDE,纬度);
cv.put(KEY_LONGITUDE,LON);
返回db.insert(DATABASE_TABLE,空,CV);
}
公共无效deleteEntry(长排){
//删除鉴于其ROWID的行,但我希望能够通过
//在KEY_NAME的名字,并将它删除该行。
//db.delete(DATABASE_TABLE,KEY_ROWID +=+行,NULL);
}
公共字符串的getData(){
的String []列= {KEY_ROWID,KEY_NAME,KEY_LATITUDE,KEY_LONGITUDE};
光标光标= db.query(DATABASE_TABLE,列,NULL,NULL,NULL,NULL,NULL);
字符串结果=;
INT iRow = cursor.getColumnIndex(KEY_ROWID);
INT INAME = cursor.getColumnIndex(KEY_NAME);
INT ILAT = cursor.getColumnIndex(KEY_LATITUDE);
INT iLon = cursor.getColumnIndex(KEY_LONGITUDE);
为(cursor.moveToFirst();!cursor.isAfterLast(); cursor.moveToNext()){
结果+ = cursor.getString(iRow)+:+ cursor.getString(INAME)+ - + cursor.getDouble(ILAT)+纬度+ cursor.getDouble(iLon)+经度\ N的;
}
返回结果;
}
私有静态类DbHelper扩展SQLiteOpenHelper {
公共DbHelper(上下文的背景下){
超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}
@覆盖
公共无效的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 +双);
);
}
@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE);
的onCreate(DB);
}
}
}
解决方案
您可以尝试这样的:
// ---删除特定的标题---
公共布尔deleteTitle(字符串名称)
{
返回db.delete(DATABASE_TABLE,KEY_NAME +=+名,NULL)> 0;
}
This might be a dumb question, but I'm new to SQLite and I can't seem to figure this out. I have 1 table that has columns KEY_ROWID
, KEY_NAME
, KAY_LATITUDE
, and KEY_LONGITUDE
. I want the user to be able to select one and delete it; Can anyone give me a direction to start in? My question is in the actual deletion of the row given only its name.
Relevant code:
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);
}
}
}
解决方案
You can try like this:
//---deletes a particular title---
public boolean deleteTitle(String name)
{
return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null) > 0;
}