Android SQLiteException代码:1

Android SQLiteException代码:1,android,mysql,Android,Mysql,我创建了一个处理程序类,它使用两个方法作为insert/remove,并从表中返回一个特定值。但是,当我在活动中创建处理程序并尝试插入产品类(将其视为字符串)时,在该操作完成之前,应用程序会崩溃。我已经检查了product变量是否返回了正确的字符串,并且一切似乎都很好,但我一直在下面得到错误。非常感谢您的帮助 cerygo.grocerygo E/AndroidRuntime: FATAL EXCEPTION: main

我创建了一个处理程序类,它使用两个方法作为insert/remove,并从表中返回一个特定值。但是,当我在活动中创建处理程序并尝试插入产品类(将其视为字符串)时,在该操作完成之前,应用程序会崩溃。我已经检查了
product
变量是否返回了正确的字符串,并且一切似乎都很好,但我一直在下面得到错误。非常感谢您的帮助

cerygo.grocerygo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: ca.comp3004.grocerygo.grocerygo, PID: 10703
                                                                             android.database.sqlite.SQLiteException: near "productname": syntax error (code 1): , while compiling: CREATE TABLE products(_id INTEGER PRIMARY KEY AUTOINCREMENT productname TEXT );
这是我的处理程序类

public class MyDBHandler extends SQLiteOpenHelper{
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "productList.db";
public static final String TABLE_PRODUCTS = "products";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_PRODUCTNAME = "productname";

public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}

public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
    super(context, name, factory, version, errorHandler);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String query = "CREATE TABLE " + TABLE_PRODUCTS + "(" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT " +  COLUMN_PRODUCTNAME + " TEXT " + ");";
        db.execSQL(query);
}

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

//Add new a row
public void addProduct(Product product){
    ContentValues values = new ContentValues();
    values.put(COLUMN_PRODUCTNAME, product.get_productName());
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TABLE_PRODUCTS, null, values);
    db.close();
}

//Delete product
public void deleteProduct(String productName){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_PRODUCTS + " WHERE "+ COLUMN_PRODUCTNAME + "=\"" + productName + "\";");
}

public ArrayList<String> dbToAS(){
    ArrayList<String> dbAS = null;
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";

    //Cursor pointer
    Cursor c = db.rawQuery(query, null);
    //move to first row
    c.moveToFirst();

    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex("productname")) != null){
            dbAS.add(c.getString(c.getColumnIndex("productname")));
        }
    }
    db.close();
    return dbAS;
}

您需要用逗号分隔列

您正在尝试执行以下语句:

CREATE TABLE products(_id INTEGER PRIMARY KEY AUTOINCREMENT productname TEXT);
当您执行此操作时:

CREATE TABLE products(_id INTEGER PRIMARY KEY AUTOINCREMENT, productname TEXT);
CREATE TABLE products(_id INTEGER PRIMARY KEY AUTOINCREMENT, productname TEXT);