引起:android.database.sqlite.SQLiteException:near"&#34 ;:语法错误(代码1):,同时编译:

时间:2014-11-27 09:10:22

标签: java android android-sqlite

    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类:

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);
    }
}

操作类:

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;
    }
}

在MainActivity中以

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

我认为CREATE TABLE没有问题。但我无法找到错误原因。

2 个答案:

答案 0 :(得分:11)

order是SQL中的关键字。重命名表,或将表名放在双引号中,如"order"

答案 1 :(得分:6)

order是一个sqlite关键字,sqlite关键字不能用作表名。 Here您可以找到这些

的列表