如何找到行ID并从数据库中删除它&列表显示?

时间:2013-07-31 01:41:18

标签: android android-listview android-sqlite

我有一个带删除功能的数据库文件:

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

在我的列表视图适配器中,我有可选择的项目,提供选项:

private void Example() {
    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(ShopSell.this);
    dlgAlert.setTitle("Example Item");
    dlgAlert.setMessage("What would you like to do?");
    dlgAlert.setPositiveButton("Okay",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                }
            });
    dlgAlert.setNegativeButton("Delete",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
//This is where I'm trying to delete the item
                     db.deleteContact(//no idea what to put here...);

                }
            });
    dlgAlert.setCancelable(true);
    dlgAlert.create().show();
} 

那么我调用什么方法找出rowID并相应删除它?
如果需要,这是整个数据库文件:

public class DBAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_ITEM = "item";

private static final String TAG = "DBAdapter";

private static final String DATABASE_NAME = "InventoryDB";
private static final String DATABASE_TABLE = "inventory";
private static final int DATABASE_VERSION = 4;

private static final String DATABASE_CREATE = "create table if not exists inventory (_id integer primary key autoincrement, "
        + "item VARCHAR not null);";

private final Context context;

private DatabaseHelper DBHelper;
private static SQLiteDatabase db;

public DBAdapter(Context ctx) {
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS inventory");
        onCreate(db);
    }
}

// ---opens the database---
public DBAdapter open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}

// ---closes the database---
public void close() {
    DBHelper.close();
}

// ---insert a record into the database---
public long insertRecord(String item) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_ITEM, item);
    return db.insert(DATABASE_TABLE, null, initialValues);
}

// ---deletes a particular record---
public boolean deleteContact(long rowId) {
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

// ---retrieves all the records---
public static Cursor getAllRecords() {
    return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_ITEM},
            null, null, null, null, null, null);
}

// ---retrieves a particular record---
public Cursor getRecord(long rowId) throws SQLException {
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
            KEY_ROWID, KEY_ITEM }, KEY_ROWID + "=" + rowId, null, null,
            null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

public int deleteAll(){
    return 0;

     }

// ---updates a record---
public boolean updateRecord(long rowId, String item) {
    ContentValues args = new ContentValues();
    args.put(KEY_ITEM, item);

    return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}

}

2 个答案:

答案 0 :(得分:0)

我不确定我是否属实,但我认为对于行ID,您必须在PRIMARY_KEY时在数据库中添加database creation,以便您可以访问数据库。

喜欢:在一个10名学生中,Rahul's roll-no is 9(Primary_key)现在如果你想删除rahul,then roll-no : 9可以作为你的程序的row_id

答案 1 :(得分:0)

listview中填充数据后,您可以使用长按或任何您要求的数据。为此,我在longitemClickListener上使用listview并显示AlertDialog以删除它。

我使用rowID获取特定行并删除它。这是代码:

db = new AndroidOpenDbHelper(this);
    showing_history
            .setOnItemLongClickListener(new OnItemLongClickListener() {

                @Override
                public boolean onItemLongClick(AdapterView<?> arg0,
                        View arg1, final int rowId, 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(rowId);
                                    deleteRow(History_id[rowId]);
                                    ((BaseAdapter) mHistoryListAdapter)
                                            .notifyDataSetChanged();

                                }
                            });
                    b.setNegativeButton("No",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                    dialog.cancel();
                                }
                            });

                    b.show();
                    return true;
                }
            });

希望这会对你有所帮助。