Android:无法从数据库中删除数据
我想从listview中删除一个特定的行,其中的数据是从数据库填充的。在Android:无法从数据库中删除数据,android,sqlite,android-listview,android-sqlite,onlongclicklistener,Android,Sqlite,Android Listview,Android Sqlite,Onlongclicklistener,我想从listview中删除一个特定的行,其中的数据是从数据库填充的。在setOnItemLongClickListener上,我可以从listview中删除数据,但是当我重新启动活动时,我可以看到我删除的行在那里,因为在onCreate()上,我从数据库中获取了数据 以下是我所做的: MainActivity.java db = new AndroidOpenDbHelper(this); showing_history .setOnItemLongClickL
setOnItemLongClickListener
上,我可以从listview中删除数据,但是当我重新启动活动时,我可以看到我删除的行在那里,因为在onCreate()
上,我从数据库中获取了数据
以下是我所做的:
MainActivity.java
db = new AndroidOpenDbHelper(this);
showing_history
.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1, final int pos, final long id) {
final AlertDialog.Builder b = new AlertDialog.Builder(
MainActivity.this);
b.setIcon(android.R.drawable.ic_dialog_alert);
b.setMessage("Delete this from history?");
b.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
HistoryNamesList.remove(pos);
((BaseAdapter) mHistoryListAdapter)
.notifyDataSetChanged();
del(pos);
}
});
b.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
dialog.cancel();
}
});
b.show();
return true;
}
});
AndroidPendbHelper.java中的我的删除查询
public boolean deleteTitle(long rowId) {
SQLiteDatabase db = this.getWritableDatabase();
return db.delete(TABLE_NAME_HISTORY, ID + "=" + rowId, null) > 0;
}
同样,我可以从listview中删除数据,但不能从数据库中删除。请帮助我解决此问题。尝试使用db.raw查询而不是db.delete。。。我希望这能帮助您..试试这段代码
public void deleteTableRow(int rowid) {
try {
database.execSQL("DELETE FROM TableName" + " where columnname="
+ rowid + ";");
} catch (Exception e) {
}
}
首先,使用以下代码获取所有行id
private int[] mRowId;
dba.open();
Cursor cr=dba.fetchData();
cr.moveToFirst();
int i=0;
while(!cr.isAfterLast())
{
mRowId[i]==cr.getInt(cr.getColumnIndex("colname"));
i++;
cr.moveToNext();
}
在listview项目上单击
list.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
db.deleteTitle(mRowId[pos]);
return true;
}
public void deleteTitle(int rowid) {
try {
database.execSQL("DELETE FROM TableName" + " where columnname="
+ rowid + ";");
} catch (Exception e) {
}
}
list.setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
db.deleteTitle(mRowId[pos]);
返回true;
}
public void deleteTitle(int rowid){
试一试{
execSQL(“从TableName中删除”+“其中columnname=”
+rowid+“;”;
}捕获(例外e){
}
}
是否有任何错误、stacktrace、日志?您可能需要查看ContentProviders。发布您的onCreate方法。position不是id。还有,什么是deleteTitle?使用del(id)代替del(pos);完全没有错误,只是得到toast说Delete failed.del(id),对清除数据库数据没有帮助。你用不同的方式说了同样的话,不管怎样,尝试过了,没有像Delted那样获得相同的Toast失败。拉取数据库文件并在Sq Lite浏览器中检查一次。表行是否删除,否则在Sq Lite浏览器中执行此查询一次。是的,所有查询都运行得很好,但我无法在长按按钮时删除。ur r sending pos I thing pos没有您尊重的行id,因此获取与Delted相同的Toast失败,首先您将所有行id保存在一个数组元素中,然后使用pos传递此数组元素,如arr[pos]。请您指导我,我已经尝试了所有的方法。m没有任何效果。使用命令propmpt adb shell检查查询是否正常,但我无法从代码中删除。您是否尝试过使用此SQLITEDABASE db;而不是SQLITEDABASE db=this.getWritableDatabase();其中是fetchData()公共游标fetchData(){try{return database.query(TableName,null,null,null,null);}catch(异常e){return null;}@sai-你能不能正确地格式化你的答案,因为一些变量丢失了,这对我来说变得非常混乱。请你能这样做,这样我就能完成这件事。Sry我不能,这只是我正在做的一个代码片段。这对我来说是个问题。你能帮我一下吗?
list.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
db.deleteTitle(mRowId[pos]);
return true;
}
public void deleteTitle(int rowid) {
try {
database.execSQL("DELETE FROM TableName" + " where columnname="
+ rowid + ";");
} catch (Exception e) {
}
}