2017-10-08 9 views
-1

メソッドのカップルを挿入/削除として使用し、テーブルから特定の値を返すハンドラクラスを作成しました。しかし、アクティビティでハンドラを作成し、製品クラス(文字列として考える)を挿入しようとすると、その処理が完了する前にアプリケーションがクラッシュします。私はproduct変数が適切な文字列を返していることをチェックして、すべてが良いと思われるビット、私は以下のエラーを取得し続けます。大いに助けてください!SQLiteException Code: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; 
} 

}

そして

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

関連する問題