Android 根据名称从sql数据库中删除时出错
我有一个简单的列表视图,其中填充了字符串值,当用户长时间单击特定项时,他可以选择删除它(在上下文操作模式下)。listview中的值位于sql数据库中。我的“deleteCat”方法似乎不起作用。每当我试图删除一个项目时,我都会出错(“没有这样的列:*items\u name*”)Android 根据名称从sql数据库中删除时出错,android,sqlite,listview,sql-delete,Android,Sqlite,Listview,Sql Delete,我有一个简单的列表视图,其中填充了字符串值,当用户长时间单击特定项时,他可以选择删除它(在上下文操作模式下)。listview中的值位于sql数据库中。我的“deleteCat”方法似乎不起作用。每当我试图删除一个项目时,我都会出错(“没有这样的列:*items\u name*”) public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) {
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_delete_cat:
CategoryDatabase entry = new CategoryDatabase(MainActivity.this);
entry.open();
entry.deleteCat(itemClicked);
List<String> all = entry.getAllCategory();
lv = (ListView)findViewById(R.id.listView1);
arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, all);
lv.setAdapter(arrayAdapter);
entry.close();
mode.finish(); // Action picked, so close the CAB
return true;
public boolean onActionItemClicked(ActionMode模式,菜单项){
开关(item.getItemId()){
案例R.id.菜单\删除\类别:
CategoryDatabase条目=新的CategoryDatabase(MainActivity.this);
entry.open();
entry.deleteCat(itemClicked);
List all=entry.getAllCategory();
lv=(ListView)findViewById(R.id.listView1);
arrayAdapter=新的arrayAdapter(MainActivity.this,android.R.layout.simple\u list\u item\u 1,全部);
低压设置适配器(阵列适配器);
entry.close();
mode.finish();//已拾取操作,因此关闭驾驶室
返回true;
数据库类:
公共类类别数据库{
public static final String KEY_ROWID = "_id";
public static final String KEY_CATEGORY = "category";
private static final String DATABASE_NAME = "DBCategory";
private static final String DATABASE_TABLE = "categoryTable";
private static final int DATABASE_VERSION = 1;
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
public CategoryDatabase(Context c){
ourContext = c;
}
public CategoryDatabase open() throws SQLException{
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close(){
ourHelper.close();
}
private static class DbHelper extends SQLiteOpenHelper{
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_CATEGORY + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public long createEntry(String category) {
ContentValues cv = new ContentValues();
cv.put(KEY_CATEGORY, category);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}
public List<String> getAllCategory() {
List<String> List = new ArrayList<String>();
// Select All Query
String selectQuery = "SELECT * FROM " + DATABASE_TABLE;
Cursor cursor = ourDatabase.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
List.add(cursor.getString(1));
} while (cursor.moveToNext());
}
return List;
}
public void deleteCat(String itemClicked) {
ourDatabase.delete(DATABASE_TABLE, KEY_CATEGORY + "=" + itemClicked, null);
}
公共静态最终字符串键\u ROWID=“\u id”;
公共静态最终字符串键\u CATEGORY=“CATEGORY”;
私有静态最终字符串数据库\u NAME=“DBCategory”;
私有静态最终字符串数据库\u TABLE=“categoryTable”;
私有静态最终int数据库_VERSION=1;
私人助理;
私人最终语境;
私有SQLITE数据库;
公共类别数据库(上下文c){
ourContext=c;
}
public CategoryDatabase open()引发SQLException{
ourHelper=newdbhelper(ourContext);
ourDatabase=ourHelper.getWritableDatabase();
归还这个;
}
公众假期结束(){
ourHelper.close();
}
私有静态类DbHelper扩展了SQLiteOpenHelper{
公共DbHelper(上下文){
super(上下文、数据库名称、null、数据库版本);
//TODO自动生成的构造函数存根
}
@凌驾
public void onCreate(SQLiteDatabase db){
db.execSQL(“创建表”+数据库表+”(“+
KEY_ROWID+“整数主键自动递增,”+
键_类别+“文本不为空;”
);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+数据库_表);
onCreate(db);
}
}
公共长createEntry(字符串类别){
ContentValues cv=新的ContentValues();
cv.put(关键类别、类别);
返回ourDatabase.insert(DATABASE_TABLE,null,cv);
}
公共列表getAllCategory(){
列表=新的ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+数据库\u表;
Cursor Cursor=ourDatabase.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
List.add(cursor.getString(1));
}while(cursor.moveToNext());
}
退货清单;
}
公共void deleteCat(字符串项已单击){
删除(数据库\表,键\类别+“=”+itemClicked,空);
}
}在删除查询中添加引号
ourDatabase.delete(数据库\u表,键\u类别+“=”+itemClicked+“”,null);
否则sql会认为它是一个列