2017-02-22 28 views
0

Я прошел через все сообщения, связанные с этой проблемой при переполнении стека, но не смог получить какое-либо решение, которое сработало. Я использую базу данных sqlite в android для хранения данных, но каждый раз, когда я ее пробовал, она выдавала ошибку, в таблице которой нет такого столбца.android.database.sqlite.SQLiteException: table 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

использовать String productPrice в ProductModel и удалить Integer.parseInt (из db.addOrder. Потому что ваша база данных с типом данных TEXT –

+0

изменила структуру вашей таблицы после запуска вашего приложения ?. То есть, ваш onCreate не будет работать, если вы не удалите/переустановите приложение. Еще один вариант - использовать метод onUpgrade() ' –

ответ

1

TRY за шагом

1) попытаться изменить DATABASE_VERSION = 1; до 2: и затем снова установить его

2) использовать String товарЦена указана в ProductModel и удалять Integer.parseInt( от db.addOrder. потому что база данных, имеющих тип данных TEXT

3) изменить эту строку

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

надеюсь, что это помогает. если это не поможет задать вопрос

+1

Деинсталляция приложения не требуется, если вы меняете версию db. – fluffyBatman

+0

ok @fluffyBatman изменен –

+0

Я думаю, что только 'clear data' должно быть достаточно @fluffyBatman, не так ли? – Nilabja

Смежные вопросы