android - SQLite - DELETE 命令中没有这样的列

标签 android sqlite android-sqlite

public void addFavourite(User user,Winkel winkel){
    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME,winkel.getNaam());
    values.put(COLUMN_POSTCODE, winkel.getPostcode());
    values.put(COLUMN_DEELGEMEENTE, winkel.getDeelGemeente());
    values.put(COLUMN_GEMEENTE, winkel.getGemeente());
    values.put(COLUMN_ADRES, winkel.getAdres());
    Log.d("lol",user.getUserName()); // Log is succesfull
    values.put(COLUMN_USERNAME, user.getUserName());
    SQLiteDatabase db = this.getWritableDatabase();
    db.insert(TABLE_FAVOURITES, null, values);
    db.close();

}

public void deleteFavourite(User user,Winkel winkel){

    String selectQuery = "DELETE FROM " + TABLE_FAVOURITES + " WHERE " + COLUMN_USERNAME+"=" + user.getUserName() + " AND " + COLUMN_NAME + "=" + winkel.getNaam();
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL(selectQuery);
    db.close();
}


    String CREATE_FAVOURITES_TABLE = "CREATE TABLE IF NOT EXISTS " +
            TABLE_FAVOURITES + "("
            + COLUMN_ID2 + " INTEGER PRIMARY KEY,"
            + COLUMN_NAME + " TEXT,"
            + COLUMN_POSTCODE + " INTEGER,"
            + COLUMN_DEELGEMEENTE + " TEXT,"
            + COLUMN_GEMEENTE + " TEXT,"
            + COLUMN_ADRES + " TEXT,"
            + COLUMN_USERNAME + " TEXT, "
            + "FOREIGN KEY(" + COLUMN_USERNAME+ ") REFERENCES "
            + TABLE_USERS + "(username) " + ")";
    db.execSQL(CREATE_FAVOURITES_TABLE);

尝试删除收藏夹时出现 SQL 异常:

android.database.sqlite.SQLiteException: no such column: Gebruikersnaam (code 1): , while compiling: DELETE FROM favorieten WHERE username=Gebruikersnaam AND naam=EUROCITY

注意:所以我假设添加收藏夹时出现问题,并且用户名实际上没有添加到表中,或者我的创建表语句中有问题,或者我的删除查询中有问题。但我不明白是什么。为什么这不起作用?

最佳答案

您需要将字符串括在单引号中。
即: WHERE username='Gebruikersnaam' AND naam='EUROCITY'

绑定(bind)参数效果会更好。
如果字符串包含一个或多个撇号 ("'" => "''"),它们还会处理双引号。
因此您不必手动替换它们。

就您而言,情况是这样的:

// Put your parameters in this array (no matter if they are numeric types
// because the SQL statement is a string anyway),
// in the exact order of appearance in your query or SQL command
String[] strParams = new String[]{user.getUserName(), winkel.getNaam()};
// Your modified SQL command with the parameter placeholders (?)
String selectQuery = "DELETE FROM " + TABLE_FAVOURITES + 
    " WHERE " + COLUMN_USERNAME + " = ? AND " + COLUMN_NAME + " = ?";
SQLiteDatabase db = this.getWritableDatabase();
// Use this execSQL() syntax
db.execSQL(selectQuery, strParams);
db.close();

关于android - SQLite - DELETE 命令中没有这样的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673126/

相关文章:

Android Google Map 和 firebase 依赖问题

java - 此错误消息是什么意思? - sqlite3_exec - 无法设置同步模式 = 1(正常)

iphone - 在 SQLite 数据库的 uiwebview 中显示 HTML 文件?

android - 为什么我的 ArrayList<String> 排序不正确?

java - 批量插入不插入

android - 尝试重新打开一个已经关闭的对象

Android AppCompat PreferenceActivity - 没有子类别/标题的平面设置列表

java - AutoCompleteSupportFragment 在选择位置后不断禁用它的自身

java - 未知崩溃

sqlite - 如何将行号保存到 SQLite 中的表中?