user4299176
user4299176

Reputation: 73

Caused by: android.database.sqlite.SQLiteException: near "": syntax error (code 1): , while compiling:

    11-27 03:32:04.471: E/AndroidRuntime(23137): Caused by: android.database.sqlite.SQLiteException: near "order": syntax error (code 1): , while compiling: create table order (_id integer primary key autoincrement, origin text not null, quantity integer not null); 

MyDatabase class:

public class MyDatabase extends SQLiteOpenHelper {

    public static final String TABLE_NAME = "order";
    public static final String TABLE_ID = "_id";
    public static final String TABLE_ORIGIN = "origin";
    public static final String TABLE_QUANTITY = "quantity";
    private static final String DATABASE_NAME = "Appple.db";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE = 
        "create table " + TABLE_NAME + 
            "(" + TABLE_ID + " integer primary key autoincrement, " + 
            TABLE_ORIGIN + " text not null, " +
            TABLE_QUANTITY + " integer not null);";

    public MyDatabase (Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

Operation class:

public class Operation {

    private MyDatabase dbHelper;
    private String[] COLUMNS = { MyDatabase.TABLE_ID, MyDatabase.TABLE_ORIGIN, MyDatabase.TABLE_QUANTITY };
    private SQLiteDatabase database;


    public Operation(Context context) {
        dbHelper = new MyDatabase(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    public void add(String origin, String quantity) {
        ContentValues values = new ContentValues();
        values.put(MyDatabase.TABLE_ORIGIN, origin);
        values.put(MyDatabase.TABLE_QUANTITY, Integer.parseInt(quantity));
        database.insert(MyDatabase.TABLE_NAME, null, values);
    }     

    public int get(String origin) {
        int total = 0;

        Cursor cursor = database.query(MyDatabase.TABLE_NAME, COLUMNS,
                MyDatabase.TABLE_ORIGIN + " = " + origin, null, null, null, null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast()) {
            total += cursor.getInt(2);
            cursor.moveToNext();
        }
        cursor.close();
        return total;
    }
}

In MainActivity start with

Operation op;
op = new Operation(this);
op.open();

I think there is no problem in CREATE TABLE. But I can't find cause of error.

Upvotes: 5

Views: 5537

Answers (2)

Blackbelt
Blackbelt

Reputation: 157487

order is a sqlite keyword, and sqlite keywords can not be used as table name. Here you can find a list of those

Upvotes: 6

laalto
laalto

Reputation: 152927

order is a keyword in SQL. Either rename the table, or put the table name in double quotes like "order".

Upvotes: 12

Related Questions