2017-02-22 39 views
0

我已经去掉了所有与堆栈溢出问题有关的帖子,但无法获得任何解决方案。我在android中使用sqlite数据库来存储数据,但每次我尝试它会抛出一个错误,该表没有这样的列。数据库类android.database.sqlite.SQLiteException:表orderTime没有名为product_price的列

//代码

public class demo extends SQLiteOpenHelper { 

    // All Static variables 
    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "orderTimeManager"; 

    // Contacts table name 
    private static final String TABLE_ORDER = "orderTime"; 

    // Contacts Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String PRODUCT_ID = "product_id"; 
    private static final String PRODUCT_NAME = "product_name"; 
    private static final String PRODUCT_DETAIL = "product_detail"; 
    private static final String PRODUCT_TYPE = "product_type"; 
    private static final String PRODUCT_PRICE = "product_price"; 


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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_ORDER_TABLE = "CREATE TABLE " + TABLE_ORDER + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," 
       + PRODUCT_NAME + " TEXT," + PRODUCT_DETAIL + " TEXT," 
       + PRODUCT_TYPE + " TEXT," 
       + PRODUCT_PRICE + " TEXT" + ")"; 
     db.execSQL(CREATE_ORDER_TABLE); 
    } 

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

     // Create tables again 
     onCreate(db); 
    } 

    // Adding new order 
    public void addOrder(ProductModel object) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     // Contact Name 
     values.put(PRODUCT_NAME, object.getProductName()); // Contact Phone Number 
     values.put(PRODUCT_DETAIL, object.getProductDetail()); 
     values.put(PRODUCT_TYPE, object.getProductType()); 
     values.put(PRODUCT_PRICE, object.getProductType()); 


     // Inserting Row 
     db.insert(TABLE_ORDER, null, values); 
     db.close(); // Closing database connection 
    } 





    // Getting All order 

     public List<ProductModel> getAllOrders() { 
     List<ProductModel> orderList = new ArrayList<ProductModel>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_ORDER; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       ProductModel object = new ProductModel(); 
       object.setProductId(cursor.getString(0)); 

       object.setProductName((cursor.getString(1))); 
       object.setProductDetail(cursor.getString(2)); 
       object.setProductType(cursor.getString(3)); 
       object.setProductPrice(Integer.parseInt(cursor.getString(4))); 
       // Adding contact to list 
       orderList.add(object); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return orderList; 
    } 

//在另一个类中调用数据库由步骤以添加数据

JSONObject ob1 = jsonArray.getJSONObject(i); 
        { 
         String productId = ob1.getString("pkproductId"); 
         String productName = ob1.getString("name"); 
         String productType = ob1.getString("productType"); 
         String productPrice = ob1.getString("price"); 
         String productDetails = ob1.getString("details"); 


         Log.d(TAG, "Inserting"); 
         db.addOrder(new ProductModel(productName,productDetails,productType,Integer.parseInt(productPrice))); 
} 



    // Product Model 


     public ProductModel(String productName, String productDetail, String productType, int productPrice) { 
    this.productId = productId; 
    this.productName = productName; 
    this.productDetail = productDetail; 
    this.productPrice = productPrice; 
    this.productType = productType; 
} 
+0

尝试更改DATABASE_VERSION = 1;到2:然后卸载您的应用程序并重新安装。希望这有助于 –

+0

在ProductModel中使用String productPrice并删除Integer.parseInt(从db.addOrder。因为您的数据库具有TEXT数据类型 –

+0

是否在运行应用程序后更改了您的表结构?是这样,除非您卸载,否则您的onCreate将不会运行/重新安装你的应用程序另一个选择是使用'onUpgrade()'方法 –

回答

1

尝试步骤

1)尝试改变DATABASE_VERSION = 1;到2:然后再次安装

2)在ProductModel中使用String productPrice并从db.addOrder中删除Integer.parseInt(。因为有TEXT数据类型的数据库

3)改变这一行

values.put(PRODUCT_TYPE, object.getProductType()); 
values.put(PRODUCT_PRICE, object.getProductPrice()); 

希望它可以帮助你。如果这无助于随意问问题

+1

如果你改变db版本,应用程序的卸载并不是必须的 – fluffyBatman

+0

ok @fluffyBatman changed –

+0

我认为只有'clear data'应该足够了@fluffyBatman,不是吗? – Nilabja

相关问题