我正在尝试使用下面的这段代码从SQL表中删除一行。但是,每当我调用此方法时,都会出现以下错误:
android.database.sqlite.SQLiteException:无此类列:Plumber(代码1):,而在编译时:从服务WHERE名称= Plumber中删除
public boolean deleteService(String name){
SQLiteDatabase db = this.getWritableDatabase();
boolean result = false;
String query = "SELECT * FROM "
+ TABLE_SERVICE
+ " WHERE "
+ COLUMN_NAME
+ " = \""
+ name
+ "\""
;
Cursor cursor = db.rawQuery(query, null);
if(cursor.moveToFirst()){
String nameStr = cursor.getString(0);
db.delete(TABLE_SERVICE, COLUMN_NAME + " = " + nameStr, null);
cursor.close();
result = true;
}
db.close();
return result;
}
这是我的桌子
public void onCreate(SQLiteDatabase db){
String CREATE_USERS_TABLE = "CREATE TABLE " +
TABLE_SERVICE + "("
+
COLUMN_NAME + " TEXT," +
COLUMN_RATE + " TEXT," +
COLUMN_CATEGORY + " TEXT," + COLUMN_SUBCATEGORY + " TEXT)";
db.execSQL(CREATE_USERS_TABLE);
}
答案 0 :(得分:0)
delete
删除行而不是列。
如果要删除列,则需要删除它。 SQL语法为:
alter table table_service drop column <column_name>;
我不知道如何用您正在使用的方法在Java中表达这一点。
答案 1 :(得分:0)
首先,您要获取COLUMN_NAME
中所有值为name
的行。
接下来,您要删除这些行的第一行(也许是唯一的一行?),因为nameStr
获得的第一行的值是COLUMN_NAME
。
你为什么做这个?
只需执行以下语句:
int number = db.delete(TABLE_SERVICE, COLUMN_NAME + " = '" + name + "'", null);
如果number
的值为0
,则没有行被删除,否则它获取已删除的行数。
答案 2 :(得分:0)
确保您的SQL语法正确,并且“ Plumber”是带双引号的字符串。根据我的经验,这些错误通常是由不正确的列或名称引起的。
使用此格式:
DELETE FROM table_name WHERE condition(s)
SQLite browser还可以帮助您可视化数据库。