删除单个 SQLite 行
Deleting a single SQLite row
我正在尝试使用列表项的 onLongClick
删除单行,但有时它会删除该行,有时不会。也许我向它传递了错误的 ID,我没有得到真正的问题所在。
我已经尝试了一些代码,我从过去 2 天开始尝试,但无法解决这个问题。
下面是我的代码。
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, final long id) {
AlertDialog.Builder alert = new AlertDialog.Builder(FavouriteListActivity.this);
alert.setMessage("Do you want to unfavorite selected item ?");
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("===========", "Position === " + position);
Log.i("===========", "long id === " + id);
deleteMethod(id);
showFavouriteList();
dialog.cancel();
}
});
alert.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alert.show();
return true;
}
和删除方法
private void deleteMethod(long Id) {
try {
long shId = Id + 1;
SQLiteDatabase db = OpenHelper.getDataHelper(getApplicationContext());
String query = "DELETE FROM " + LocalDatabase.FAVORITE_LIST.TABLE_FAVOURITE_LIST + " WHERE " + LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_ID + " = " + shId;
Log.i("QUERY", "" + query);
db.execSQL(query);
db.close();
} catch (Exception e) {
e.printStackTrace();
}
}
虽然我没有收到任何错误,但它并没有从数据库或列表视图中删除项目
首先在模型中创建一个 id 变量 class 并为此生成 getter 和 setter:
public static final String PRIMARY_ID="_id";
现在将 primeary_id 设置为从光标建模:
if (cursor.moveToFirst()) {
do {
model = new FavouriteListVo(lngID, strName);
model.setStrName(cursor.getString(cursor.getColumnIndex(LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_NAME)));
model.setPrimId(cursor.getString(cursor.getColumnIndex(LocalDatabase.FAVORITE_LIST.PRIMARY_ID)));
arrayListFav.add(model);
} while (cursor.moveToNext());
}
现在要删除该行,请使用此主键:
public void onClick(DialogInterface dialog, int which) {
String id=model.getPrimId();
deleteMethod(id);
showFavouriteList();
dialog.cancel();
}
删除功能与您的完全相同,正如我在评论中提到的,问题出在 id 而不是您的删除功能:
private void deleteMethod(long Id) {
try {
long shId = Id + 1;
SQLiteDatabase db = OpenHelper.getDataHelper(getApplicationContext());
String query = "DELETE FROM " + LocalDatabase.FAVORITE_LIST.TABLE_FAVOURITE_LIST + " WHERE " + LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_ID + " = " + shId;
Log.i("QUERY", "" + query);
db.execSQL(query);
db.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我正在尝试使用列表项的 onLongClick
删除单行,但有时它会删除该行,有时不会。也许我向它传递了错误的 ID,我没有得到真正的问题所在。
我已经尝试了一些代码,我从过去 2 天开始尝试,但无法解决这个问题。
下面是我的代码。
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, final long id) {
AlertDialog.Builder alert = new AlertDialog.Builder(FavouriteListActivity.this);
alert.setMessage("Do you want to unfavorite selected item ?");
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("===========", "Position === " + position);
Log.i("===========", "long id === " + id);
deleteMethod(id);
showFavouriteList();
dialog.cancel();
}
});
alert.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alert.show();
return true;
}
和删除方法
private void deleteMethod(long Id) {
try {
long shId = Id + 1;
SQLiteDatabase db = OpenHelper.getDataHelper(getApplicationContext());
String query = "DELETE FROM " + LocalDatabase.FAVORITE_LIST.TABLE_FAVOURITE_LIST + " WHERE " + LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_ID + " = " + shId;
Log.i("QUERY", "" + query);
db.execSQL(query);
db.close();
} catch (Exception e) {
e.printStackTrace();
}
}
虽然我没有收到任何错误,但它并没有从数据库或列表视图中删除项目
首先在模型中创建一个 id 变量 class 并为此生成 getter 和 setter:
public static final String PRIMARY_ID="_id";
现在将 primeary_id 设置为从光标建模:
if (cursor.moveToFirst()) {
do {
model = new FavouriteListVo(lngID, strName);
model.setStrName(cursor.getString(cursor.getColumnIndex(LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_NAME)));
model.setPrimId(cursor.getString(cursor.getColumnIndex(LocalDatabase.FAVORITE_LIST.PRIMARY_ID)));
arrayListFav.add(model);
} while (cursor.moveToNext());
}
现在要删除该行,请使用此主键:
public void onClick(DialogInterface dialog, int which) {
String id=model.getPrimId();
deleteMethod(id);
showFavouriteList();
dialog.cancel();
}
删除功能与您的完全相同,正如我在评论中提到的,问题出在 id 而不是您的删除功能:
private void deleteMethod(long Id) {
try {
long shId = Id + 1;
SQLiteDatabase db = OpenHelper.getDataHelper(getApplicationContext());
String query = "DELETE FROM " + LocalDatabase.FAVORITE_LIST.TABLE_FAVOURITE_LIST + " WHERE " + LocalDatabase.FAVORITE_LIST.FAVOURITE_LIST_ID + " = " + shId;
Log.i("QUERY", "" + query);
db.execSQL(query);
db.close();
} catch (Exception e) {
e.printStackTrace();
}
}