我希望能够删除 SQLite 数据库中的特定列。
我已尝试将列的ID作为whereClause
传递,但我一直收到错误消息,指出whereClause
需要字符串值。
我已经梳理了 SO 的解决方案,但没有找到任何可以回答我问题的内容。我也试过谷歌搜索,并以不同的方式写了我的问题,但无济于事。
这是我的代码
删除按钮
public void toDeleteNote(View view) {
DBHelper dbHelper = new DBHelper(this);
int deletedRows = dbHelper.deleteData(selectedID);
if (deletedRows > 0){
Toast.makeText(getBaseContext(), selectedName + " deleted successfully", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getBaseContext(), "Something went wrong!", Toast.LENGTH_LONG).show();
}
Intent intent5 = new Intent(EditData.this, MainActivity.class);
startActivity(intent5);
}
}
DBHelper删除方法
public int deleteData(int id){
String ID = String.valueOf(id);
SQLiteDatabase database = this.getWritableDatabase();
return database.delete(TABLE_NAME, _id + " = ?",new String[]{ID});
创建表格
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + MAP_NO + " INTEGER, " + LOCATION + " TEXT, " + DATE + " INTEGER, " + NOTATHOMES + " TEXT)";
db.execSQL(createTable);
}
如果您需要更多信息,请随时提出。
答案 0 :(得分:0)
您不应该依赖数据库的_id
列来唯一标识表中的行,例如,如果您有3行,并且表将_id
为0,1,2。事实并非如此。
无论表中的总行数如何,该值_id
列都会递增。例如,如果最初有3行,则可能将_id
设置为0,1,2。然后,如果删除前两行并再次添加相同的2行,则将具有2,3,4作为_id
。
因此,要唯一地标识表中的行,您应该在单独的列中定义自己的唯一ID(如UUID),对于行删除和添加不会更改。
答案 1 :(得分:0)
所以我想通了。
我需要做的就是使用与列表视图关联的游标返回id并以意图存储。
这是一个例子:
public void displayList() {
final Cursor cursor = dbHelper.getData();
String from[] = new String[]{DBHelper.LOCATION};
int to[] = new int[]{R.id.ListLayout1};
simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.row_item, cursor, from, to, 0);
final ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(simpleCursorAdapter);
while (cursor.moveToNext()) {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(cursor.getCount()>0) {
cursor.moveToPosition(i);
Intent intent = new Intent(MainActivity.this, EditData.class);
intent.putExtra("id", cursor.getInt(cursor.getColumnIndex(DBHelper._id)));
startActivity(intent);
就是这样。 感谢大家的帮助!