lundi 14 septembre 2015

SQLiteException: near "" syntax error

My SQLiteOpenHelper class:

public class MyUsersDatabaseAdapter
{
    MyUsersDatabase myUsersDatabase;
    SQLiteDatabase sqLiteDatabase;

public MyUsersDatabaseAdapter(Context context, String name, CursorFactory factory,int version)
{
    myUsersDatabase = new MyUsersDatabase(context, name, factory, version);
}

public long inserDataToDatabase(String firstName,String lastName)
{
    sqLiteDatabase = myUsersDatabase.getWritableDatabase(); // sqliteDatabase is a reference to my database

    ContentValues contentValues = new ContentValues();
    contentValues.put(MyUsersDatabase.FIRST_NAME,firstName ); // First parameter(key) is the name of the column
    contentValues.put(MyUsersDatabase.LAST_NAME, lastName);

    long id = sqLiteDatabase.insert(MyUsersDatabase.TABLE_NAME, null, contentValues);
    return id;
}

static class MyUsersDatabase extends SQLiteOpenHelper
{
    private static final int DATABASE_VERSION = 4;
    private static final String DATABASE_NAME = "usersDatabase";
    private static final String TABLE_NAME = "usersTable";
    private static final String UID = "_id"; // User identification number
    private static final String FIRST_NAME = "First Name"; // Column
    private static final String LAST_NAME = "Last Name"; // Column
    private static final String CREATE_TABLE = "CREATE TABLE " + MyUsersDatabase.DATABASE_NAME + "(" 
    + UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
    + FIRST_NAME + " TEXT, " 
    + LAST_NAME + " TEXT);";
    private static final String DROP_TABLE = "DROP TBALE IF EXIST " + TABLE_NAME;

    private Context context;


    public MyUsersDatabase(Context context, String name, CursorFactory factory,int version)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        this.context = context;
        ToastMessage.message(context, "Constructor was called");
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        ToastMessage.message(context, "onCreate() was called");
        try
        {
            db.execSQL(CREATE_TABLE);
        }
        catch (SQLException e)
        {
            ToastMessage.message(context,"" + e);
        }
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        ToastMessage.message(context, "onUpgrade() was called");
        try
        {
            db.execSQL(DROP_TABLE);
            onCreate(db);
        } 
        catch (SQLException e) 
        {
            ToastMessage.message(context,"" + e);
        }
    }
}

LogCat:

09-14 16:50:13.711: E/SQLiteLog(26257): (1) near "Name": syntax error
09-14 16:50:13.713: E/SQLiteDatabase(26257): Error inserting Last Name= First Name=
09-14 16:50:13.713: E/SQLiteDatabase(26257): android.database.sqlite.SQLiteException: near "Name": syntax error (code 1): , while compiling: INSERT INTO usersTable(Last Name,First Name) VALUES (?,?)
09-14 16:50:13.713: E/SQLiteDatabase(26257):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:894)
09-14 16:50:13.713: E/SQLiteDatabase(26257):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:505)
09-14 16:50:13.713: E/SQLiteDatabase(26257):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
09-14 16:50:13.713: E/SQLiteDatabase(26257):    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1570)

So i fet this LogCat after clicking a Button.

Main class:

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_up);

    viewsInitialization();

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    myUsersDatabase = new MyUsersDatabaseAdapter(SignUpActivity.this,"UsersDatabase" , null, 1);
contentValues = new ContentValues();

    signUpButton.setOnClickListener(new View.OnClickListener()
    {   
        @Override
        public void onClick(View v) 
        {
            userFirstName = firstNameEditText.getText().toString();
            userLastName = lastNameEditText.getText().toString();

            id = myUsersDatabase.inserDataToDatabase(userFirstName, userLastName);
            if (id < 0)
            {
                ToastMessage.message(SignUpActivity.this, "Unsuccessful row insertion");
            }
            else 
            {
                ToastMessage.message(SignUpActivity.this, "Successful row insertion");
            }
        }
    });
}

And also the Toast "Unsuccessful row insertion".

So whats wrong with my code?

Aucun commentaire:

Enregistrer un commentaire