1

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

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;
}

}

4

2 回答 2

0

在您填充数据后,listview您可以使用长按或您的要求。为此,我已经使用longitemClickListenerlistview展示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;
                }
            });

希望这会帮助你。

于 2013-07-31T04:47:16.903 回答
0

我不确定我是不是真的,但我认为对于行 id,你必须PRIMARY_KEY在你的数据库中添加一个database creation,通过它你可以访问你的数据库。

比如:在一个10个学生的班级里,Rahul's roll-no is 9(Primary_key)现在如果你想删除rahul比,then roll-no : 9可以充当row_id你的程序。

于 2013-07-31T02:12:02.870 回答