0

I have a table in database MS_EVENT_CONFIRMATION, this table consists of 3 column :

  1. EVENT_Id
  2. MEMBER_USERNAME
  3. EVENT_CONFIRMATION

And I want to make a code to update EVENT_CONFIRMATION Column, but I got an error that always said no such column : ....

Here is my code :

Create table

        db.execSQL("CREATE TABLE IF NOT EXISTS " + MS_EVENT_CONFIRMATION
                + "(" + EVENT_ID + " INTEGER, " + MEMBER_USERNAME
                + " TEXT, " + EVENT_CONFIRMATION + " TEXT, PRIMARY KEY("
                + EVENT_ID + ", " + MEMBER_USERNAME + "), FOREIGN KEY ("
                + MEMBER_USERNAME + ") REFERENCES " + MS_MEMBER + "("
                + MEMBER_USERNAME + "), FOREIGN KEY (" + EVENT_ID
                + ") REFERENCES " + MS_EVENT + "(" + EVENT_ID + "));");

This is where I insert the same table :

    String defaultConfirmation = "pending";
    String Query = "SELECT * FROM " + MS_GROUP_DETAIL + " WHERE "
            + GROUP_ID + "=?";

    Cursor c = ourDatabase.rawQuery(Query, new String[] { groupId });
    int iMember = c.getColumnIndex(MEMBER_USERNAME);

    String username = "";

    ContentValues cv2 = new ContentValues();

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        username = c.getString(iMember);

        if (!checkConfirmation(eventId, username)) {
            cv2.put(EVENT_ID, eventId);
            cv2.put(MEMBER_USERNAME, username);
            cv2.put(EVENT_CONFIRMATION, defaultConfirmation);
            ourDatabase.insert(MS_EVENT_CONFIRMATION, null, cv2);
        }
    }

This is Where I want to pass the data from my activity to database :

        case R.id.bDoAttendingEvent:
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("You choose to attend this event?")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                myDb.open();
                                string = "attend";
                                myDb.confirmEvent(eventId, Username, string);
                                attend.setBackgroundColor(Color.BLUE);
                                notAttend.setBackgroundColor(Color.GRAY);
                                confirmation.setText("Confirmation : Attend");
                                myDb.close();

                            }
                        })
                .setNegativeButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();
        alert.show();
        break;

And this is the database file, where I want to update the column : `

    public void confirmEvent(String eventId, String username, String string) {
    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();
    cv.put(EVENT_CONFIRMATION, string);

    ourDatabase.update(MS_EVENT_CONFIRMATION, cv, MEMBER_USERNAME + "="
            + username + " AND " + EVENT_ID + "=" + eventId, null);

}

Logcat :

12-18 22:18:15.966: E/SQLiteLog(16892): (1) no such column: adminadmin
12-18 22:18:15.966: D/AndroidRuntime(16892): Shutting down VM
12-18 22:18:15.966: W/dalvikvm(16892): threadid=1: thread exiting with uncaught exception (group=0x41da7c08)
12-18 22:18:15.986: E/AndroidRuntime(16892): FATAL EXCEPTION: main
12-18 22:18:15.986: E/AndroidRuntime(16892): Process: com.thesis.teamizer, PID: 16892
12-18 22:18:15.986: E/AndroidRuntime(16892): android.database.sqlite.SQLiteException: no such column: adminadmin (code 1): , while compiling: UPDATE MsEventConfirmation SET EventConfirmation=? WHERE Username=adminadmin AND EventId=1
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1706)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1654)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at com.thesis.teamizer.Database.confirmEvent(Database.java:1128)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at com.thesis.teamizer.EventDetail$1.onClick(EventDetail.java:112)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.os.Handler.dispatchMessage(Handler.java:102)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.os.Looper.loop(Looper.java:146)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at android.app.ActivityThread.main(ActivityThread.java:5602)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at java.lang.reflect.Method.invokeNative(Native Method)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at java.lang.reflect.Method.invoke(Method.java:515)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
12-18 22:18:15.986: E/AndroidRuntime(16892):    at dalvik.system.NativeStart.main(Native Method)

Can you please help tell me where is my mistake? thank you in advance

Julius Leo
  • 41
  • 7
  • 1
    `WHERE Username=adminadmin` If USERNAME is a string, a string must be passed: `WHERE Username='adminadmin'`. – Phantômaxx Dec 18 '14 at 15:31
  • @DerGolem Thanks, I added 'string' and it worked, but I also have another update Code at my program, but it worked without using 'string', I wonder how could this time is different from my previous code? – Julius Leo Dec 18 '14 at 15:49
  • Maybe you're correctly using a **bound parameter** (using the **?** placeholder). – Phantômaxx Dec 18 '14 at 15:59

1 Answers1

1

Please try this

ourDatabase.update(MS_EVENT_CONFIRMATION, cv, MEMBER_USERNAME + "="
    + "'" + username + "'" + " AND " + EVENT_ID + "=" + eventId, null);

In SQL, string literals must be quoted.

Rohit5k2
  • 17,948
  • 8
  • 45
  • 57