从SQL表删除行的问题

时间:2018-11-10 19:58:01

标签: java sql

我正在尝试使用下面的这段代码从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);

}

3 个答案:

答案 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还可以帮助您可视化数据库。