2017-10-08 48 views
-1

我已經創建了一個處理程序類,它使用幾個方法作爲插入/刪除,並從表中返回一個特定的值。但是,當我在活動中創建處理程序並嘗試插入產品類時(將其視爲字符串),並且在完成之前,應用程序會崩潰。我已經檢查product變量是返回一個正確的字符串,並且一切看起來都很好,有點讓我不斷收到下面的錯誤。非常感謝!SQLiteException代碼:1

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

}

而且使用handler

MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1); 
    product = data.getString("Product"); 
     productName.setText("Product: " + product); 
     //Individual request 

     Button button = (Button) findViewById(R.id.addItem); 
     final String finalProduct = data.getString("Product"); 
     button.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       dbHandler.addProduct(new Product(product)); 
       Toast.makeText(ItemPop.this, "Added", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

回答

2

您需要將列用逗號分隔的活動。

你試圖執行以下語句:

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

雖然你應該執行這樣的:

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

謝謝,定了! – AyeJay

相關問題