表tbl_order没有名为的列

时间:2019-04-14 22:07:30

标签: android sql

有关解决方案的帮助,我在SQL表中添加了新列。但是在日志中显示以下错误:

SQLiteLog: (1) table tbl_order has no column named Menu_quantity

这是我的DBHelper,在其中添加了:private final String MENU_QUANTITY = "Menu_quantity";

public class DBHelper extends SQLiteOpenHelper{


String DB_PATH;
private final static String DB_NAME = "db_order";
public final static int DB_VERSION = 2;
public static SQLiteDatabase db;

private final Context context;

private final String TABLE_NAME = "tbl_order";
private final String ID = "id";
private final String MENU_NAME = "Menu_name";
private final String QUANTITY = "Quantity";
private final String TOTAL_PRICE = "Total_price";
private final String MENU_QUANTITY = "Menu_quantity";

public DBHelper(Context context) {

    super(context, DB_NAME, null, DB_VERSION);
    this.context = context;


    DB_PATH = Constant.DBPath;
    DB_PATH = Constant2.DBPath;
    DB_PATH = Constant3.DBPath;
}


public void createDataBase() throws IOException{

    boolean dbExist = checkDataBase();
    //SQLiteDatabase db_Read = null;


    if(dbExist){
        //do nothing - database already exist

    }else{
        this.getReadableDatabase();
        //db_Read = this.getReadableDatabase();
       // db_Read.close();

        try {
            copyDataBase();
        } catch (IOException e) {
            e.printStackTrace();
           // throw new Error("Error copying database");
        }
    }

}

private boolean checkDataBase(){

    File dbFile = new File(DB_PATH + DB_NAME);

    return dbFile.exists();

}


private void copyDataBase() throws IOException{

    InputStream myInput = context.getAssets().open(DB_NAME);

    String outFileName = DB_PATH + DB_NAME;

    OutputStream myOutput = new FileOutputStream(outFileName);

    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    myOutput.flush();
    myOutput.close();
    myInput.close();

}

public void openDataBase() throws SQLException{
    String myPath = DB_PATH + DB_NAME;
    db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}

@Override
public void close() {
    db.close();
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   if (newVersion > oldVersion) {
        db.execSQL("ALTER TABLE tbl_order ADD COLUMN Menu_quantity INTEGER DEFAULT 0");
    }
}

/** This code is used to retrieve all data from the database. */
public ArrayList<ArrayList<Object>> getAllData(){
    ArrayList<ArrayList<Object>> dataArrays = new ArrayList<ArrayList<Object>>();

    Cursor cursor = null;

    try{
        cursor = db.query(
                TABLE_NAME,
                new String[]{ID, MENU_NAME, QUANTITY, TOTAL_PRICE, MENU_QUANTITY},
                null,null, null, null, null, null);
        cursor.moveToFirst();

        if (!cursor.isAfterLast()){
            do{
                ArrayList<Object> dataList = new ArrayList<Object>();

                dataList.add(cursor.getLong(0));
                dataList.add(cursor.getString(1));
                dataList.add(cursor.getString(2));
                dataList.add(cursor.getString(3));
                dataList.add(cursor.getString(4));

                dataArrays.add(dataList);
            }

            while (cursor.moveToNext());
        }
        cursor.close();
    }catch (SQLException e){
        Log.e("DB Error", e.toString());
        e.printStackTrace();
    }

    return dataArrays;
}

/** This code is used to retrieve all data from the database. */
public boolean isDataExist(long id){
    boolean exist = false;

    Cursor cursor = null;

    try{
        cursor = db.query(
                TABLE_NAME,
                new String[]{ID},
                ID +"="+id,
                null, null, null, null, null);
        if(cursor.getCount() > 0){
            exist = true;
        }

        cursor.close();
    }catch (SQLException e){
        Log.e("DB Error", e.toString());
        e.printStackTrace();
    }

    return exist;
}

/** This code is used to retrieve all data from the database. */
public boolean isPreviousDataExist(){
    boolean exist = false;

    Cursor cursor = null;

    try{
        cursor = db.query(
                TABLE_NAME,
                new String[]{ID},
                null,null, null, null, null);
        if(cursor.getCount() > 0){
            exist = true;
        }

        cursor.close();
    }catch (SQLException e){
        Log.e("DB Error", e.toString());
        e.printStackTrace();
    }

    return exist;
}

public void addData(long id, String menu_name, int quantity, double total_price, int menu_quantity){
    // this is the key holder of the value pair used by the SQLite functions for Android
    ContentValues values = new ContentValues();
    values.put(ID, id);
    values.put(MENU_NAME, menu_name);
    values.put(QUANTITY, quantity);
    values.put(TOTAL_PRICE, total_price);
    values.put(MENU_QUANTITY, menu_quantity);

    // ask the database object to insert new data
    try{db.insert(TABLE_NAME, null, values);}
    catch(Exception e)
    {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}

public void deleteData(long id){
    // ask the database manager to delete the row of the given identifier
    try {db.delete(TABLE_NAME, ID + "=" + id, null);}
    catch (Exception e)
    {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}

public void deleteAllData(){
    // ask the database manager to delete the row of the given identifier
    try {db.delete(TABLE_NAME, null, null);}
    catch (Exception e)
    {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}

public void updateData(long id, int quantity, double total_price){
    // this is the key holder of the value pair used by the SQLite functions for Android
    ContentValues values = new ContentValues();
    values.put(QUANTITY, quantity);
    values.put(TOTAL_PRICE, total_price);
   // values.put(MENU_QUANTITY, menu_quantity);
    // попросите объект базы данных обновить строку базы данных заданного rowID
    try {db.update(TABLE_NAME, values, ID + "=" + id, null);}
    catch (Exception e)
    {
        Log.e("DB Error", e.toString());
        e.printStackTrace();
    }
} 

这是我将变量发送到DBHelper的方式:

// when you click the add button, add the menu to the table of orders in the database
        if(!temp.equalsIgnoreCase("")){
            quantity = Integer.parseInt(temp);
            if(dbhelper.isDataExist(Menu_ID)){
                dbhelper.updateData(Menu_ID, quantity, (Menu_price*quantity));
            }else{
                dbhelper.addData( Menu_ID, Menu_name, quantity, (Menu_price*quantity), Menu_quantity);
            }
        }else{
            dialog.cancel();
        }
      }
    });

0 个答案:

没有答案