2016-07-30 1 views
1
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の例外:SQLlite - DELETEコマンドではそのような列

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

注:私は仮定しているいずれかのお気に入りを追加するときに何かが間違っている、と実際のユーザ名テーブルに追加されない、または私の作成テーブルのステートメントで何か間違っている、または私のdeletequeryの何かが間違ってtheres。私は何を理解することはできません。なぜこれは機能しないのですか?

+1

。私は: 'どこのユーザー名= 'Gebruikersnaam'とnaam = 'EUROCITY'' –

+2

あなたはあなたの値の引用符を忘れてしまった。しかし、実際にはPrepared Statementsを使うべきです。 –

+0

@juergendはい、バインドされたパラメータがうまく動作します。 1つ以上のアポストロフィ( '' '=>' '' ')を含む文字列の場合は、単一引用符を倍にして扱います。 –

答えて

1

文字列を一重引用符で囲む必要があります。
I:WHERE username = 'Gebruikersnaam' AND naam = 'EUROCITY'

バインドされたパラメータはうまく機能します。
アポストロフィ("'" =>"''")を1つ以上含む文字列の場合は、単一引用符も倍増します。
したがって、手動で交換する必要はありません。あなたのケースでは

、それはこのようなものです:あなたは、単一引用符であなたの文字列を囲む必要があり

// 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(); 
関連する問題