2017-06-03 5 views
0

私の更新ステートメントに何か問題があります。私は自分のデータベースからユーザーを更新しようとしていますが、このユーザーは自分のデータベースにいると確信していますが、更新できません。私はエラーが言ったので、私は私の列名を使用して、障害を持っていると思う:android.database.sqlite.SQLiteException:いいえそのような列:更新

android.database.sqlite.SQLiteException: no such column: UPDATE 

しかし、私はこのコラムを求めたことはありませんが、nnnは私の方式では、まったく列ではありません。ここで文が

public void changeprofiel(String id, Profiel p){ 

    SQLiteDatabase db = this.getWritableDatabase(); 


    /* ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2_PROFIELEN, p.getUsername()); 
    contentValues.put(COL_3_PROFIELEN, p.getFirstname()); 
    contentValues.put(COL_4_PROFIELEN, p.getEmail()); 
    contentValues.put(COL_5_PROFIELEN, p.getPassword());*/ 

    // de insert methode geeft -1 terug als het niet gelukt is en de row value als het wel gelukt is 

    System.out.println(getProfielWid(id).getId()); 
// db.update(TABLE_NAME_PROFIELEN, contentValues,COL_1_PROFIELEN ="'" + id +"'",null); 


    db.execSQL("UPDATE "+ TABLE_NAME_PROFIELEN + " SET "+COL_2_PROFIELEN+" = "+p.getUsername()+", " +COL_3_PROFIELEN+" = "+p.getFirstname()+", "+COL_4_PROFIELEN+" = "+p.getEmail()+", "+COL_5_PROFIELEN+" = "+p.getPassword()+ 
      " WHERE " + COL_1_PROFIELEN + "=" + id + ""); 

} 

である私も、どこclosuleため、この方法を試してみました:

" WHERE " + COL_1_PROFIELEN + "='" + id + "'"); 

しかし、彼らは私に、このエラーの両方を与える:

I/System.out: nnnnnn 
E/SQLiteLog: (1) no such column: nnn 
D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.cedri.bcv, PID: 13908 
android.database.sqlite.SQLiteException: no such column: nnn (code 1): , while compiling: UPDATE profielen SET username = nnn, firstname = nnn, email = nnn, password = xxx WHERE profile_id=nnnnnn 
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677) 
     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608) 
     at com.example.cedri.bcv.DB.DatabaseHelper.changeprofiel(DatabaseHelper.java:82) 
     at com.example.cedri.bcv.Activities.MainActivity.savechanges(MainActivity.java:94) 
     at com.example.cedri.bcv.Fragments.AccountFragment$1.onClick(AccountFragment.java:86) 
     at android.view.View.performClick(View.java:5637) 
     at android.view.View$PerformClick.run(View.java:22429) 
     at android.os.Handler.handleCallback(Handler.java:751) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6121) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

は、私はすべての値を設定する必要がありますか一重引用符の間に?

+1

は、パラメータを使用することを学びます。ランダムな文字列をクエリ文字列にダンプしないでください。構文エラーが発生する可能性があります(また、コードをSQLインジェクションの影響を受けやすくする)。 –

+1

はいrawqueryを使用する場合は、すべてのテキスト/文字列型の値を一重引用符で囲む必要がありますが、@Gordonの方法を採用することができます。ここではアイデアを得ることができます。https://developer.android.com/training/basics/data-storage /databases.html – Pavan

+0

私は一重引用符で働いてくれてありがとう! – Peter

答えて

0

カラムのタイプがtextの場合は、値を一重引用符で囲む必要があります('')。

あなたのクエリは次のようになります。

UPDATE profielen SET username = 'nnn', firstname = 'nnn', email = 'nnn', password = 'xxx' 
WHERE profile_id='nnnnnn' 
関連する問題