2014-12-21 49 views
0

當我的Sqlite數據庫中的數據添加到表時,出現此錯誤。在向數據庫插入值時,Sqlite'沒有這樣的表'錯誤

12-21 17:31:19.345: E/SQLiteLog(24127): (1) no such table: accessory_data 
    12-21 17:31:19.345: E/DB ERROR(24127): android.database.sqlite.SQLiteException: 
no such table: accessory_data (code 1): , 
while compiling: SELECT aid, name, image, url, price 
FROM accessory_data 

請注意,數據庫先前是由另一種方法創建的,以便將數據添加到另一個表中。我在這裏做的只是將數據添加到同一數據庫中的不同表中。這是問題的根源嗎?

DBOperations類:

public class DBOps extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_NAME = "jezzadb"; 


    public String CREATE_ACC_QUERY = "CREATE TABLE " + AccessoriesTableInfo.TABLE_NAME + " (" + AccessoriesTableInfo.AID + " VARCHAR, " + 
      AccessoriesTableInfo.NAME + " VARCHAR, " + AccessoriesTableInfo.IMAGE + " VARCHAR, " + AccessoriesTableInfo.PRICE + " VARCHAR, " + 
      AccessoriesTableInfo.URL + " VARCHAR);"; 

    public DBOps(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_ACC_QUERY); 
    } 


public void insertAccessories(DBOps dop, Accessories a) 
    { 
     SQLiteDatabase SQ = dop.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put(AccessoriesTableInfo.AID, a.ID); 
     cv.put(AccessoriesTableInfo.NAME, a.Name); 
     cv.put(AccessoriesTableInfo.URL, a.URL); 
     cv.put(AccessoriesTableInfo.IMAGE, a.Image); 
     cv.put(AccessoriesTableInfo.PRICE, a.PRICE); 
     SQ.insert(AccessoriesTableInfo.TABLE_NAME, null, cv); 
     Log.d("Database Operations", "Inserted Accessories succesfully!"); 
    } 


    public ArrayList<Accessories> getAccessories(DBOps dop) 
    { 
     ArrayList<Accessories> arr = new ArrayList<Accessories>(); 

     SQLiteDatabase SQ = dop.getReadableDatabase(); 
     String[] columns = {AccessoriesTableInfo.AID,AccessoriesTableInfo.NAME,AccessoriesTableInfo.IMAGE,AccessoriesTableInfo.URL, 
       AccessoriesTableInfo.PRICE}; 
     Cursor CR = SQ.query(AccessoriesTableInfo.TABLE_NAME, columns, null, null, null, null, null); 
     CR.moveToFirst(); 

     for(int i=0;i<CR.getCount();i++) 
     { 
      while (!CR.isAfterLast()) { 
       Accessories a= new Accessories(); 
       a.ID = CR.getString(0); 
       a.Name = CR.getString(1); 
       a.URL = CR.getString(2); 
       a.Image = CR.getString(3); 
       a.PRICE = CR.getString(4); 

       arr.add(a); 
       CR.moveToNext(); 
      } 
      CR.close(); 
      break; 
     } 
return arr; 
    } 

AccessoriesTableInfo類:

public class AccessoriesTableData { 

    public AccessoriesTableData() 
    { 

    } 
    public static abstract class AccessoriesTableInfo implements BaseColumns 
    { 
     public static final String AID = "aid"; 
     public static final String NAME = "name"; 
     public static final String IMAGE = "image"; 
     public static final String URL = "url"; 
     public static final String PRICE = "price"; 
     public static final String TABLE_NAME = "accessory_data"; 
    } 
} 

我在做什麼錯?

回答

1

請注意,數據庫以前是通過另一種方法創建的,以便將數據添加到另一個表中。我在這裏做的只是將數據添加到同一數據庫中的不同表中。這是問題的根源嗎?

是的,這是問題所在。每個數據庫文件只能使用一個SQLiteOpenHelper子類。

會發生什麼情況是請求版本1的數據庫文件已經存在,因此不會調用onCreate()onUpgrade()等數據庫幫助程序生命週期回調。

延伸閱讀:When is SQLiteOpenHelper onCreate()/onUpgrade() run?

+0

哦,我看..但有沒有辦法來添加新表和新的價值,而不必放棄現有的表或刪除數據庫?它是onUpgrade()方法嗎? – Pjayness

+0

將'private static final int DATABASE_VERSION = 1;'更改爲'private static final int DATABASE_VERSION = 2;'。通過這樣做,調用onUpgrade()。 –

相關問題