2014-10-20 29 views
0

由於某些原因的SQLite只創建了兩個表,而不是4.我正在使用此代碼:的SQLite只創建2個表

@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    String TABLE_RECEIPT   = "CREATE TABLE RECEIPT (receiptId INTEGER PRIMARY KEY AUTOINCREMENT, receiptDate INTEGER); "; 
    db.execSQL(TABLE_RECEIPT); 

    String TABLE_PRODUCT   = "CREATE TABLE PRODUCT (productId INTEGER PRIMARY KEY AUTOINCREMENT, productName TEXT NOT NULL, productImagePath TEXT, productPrice REAL NOT NULL);"; 
    db.execSQL(TABLE_PRODUCT); 

    String TABLE_RECEIPT_RULE  = "CREATE TABLE RECEIPT_RULE (receiptId INTEGER NOT NULL, productId INTEGER NOT NULL, ruleAmount INTEGER NOT NULL, PRIMARY KEY (receiptId, productId), FOREIGN KEY(receiptId) REFERENCES RECEIPT(receiptId), FOREIGN KEY(productId) REFERENCES PRODUCT(productId));"; 
    db.execSQL(TABLE_RECEIPT_RULE); 

    String TABLE_PRODUCT_ATTRIBUTES = "CREATE TABLE PRODUCT_ATTRIBUTES (productId INTEGER NOT NULL, attributeName TEXT NOT NULL, attributeValue TEXT NOT NULL, PRIMARY KEY (productId, attributeName), FOREIGN KEY(productId) REFERENCES PRODUCT(productId));"; 
    db.execSQL(TABLE_PRODUCT_ATTRIBUTES); 

    Log.i(Config.TAG, "Recreated database"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    String TABLE_PRODUCT   = "DROP TABLE PRODUCT;"; 
    String TABLE_RECEIPT   = "DROP TABLE RECEIPT;"; 
    String TABLE_RECEIPT_RULE  = "DROP TABLE RECEIPT_RULE;"; 
    String TABLE_PRODUCT_ATTRIBUTES = "DROP TABLE PRODUCT_ATTRIBUTES;"; 

    db.execSQL(TABLE_PRODUCT); 
    db.execSQL(TABLE_RECEIPT); 
    db.execSQL(TABLE_RECEIPT_RULE); 
    db.execSQL(TABLE_PRODUCT_ATTRIBUTES); 
    onCreate(db); 
} 

消息Recreated database是可見的,所以也嘗試創建的所有表。它不顯示任何類型的錯誤。

我不知道這是否是有用的,但我在看現有的表下面的代碼:

//Placed in SQLiteStorage 
public Cursor showAllTables(){ 
    String mySql = " SELECT name FROM sqlite_master " + " WHERE type='table'    " 
      + " AND name LIKE 'PR_%' "; 
    return db.rawQuery(mySql, null); 
} 

//In Activity, create the storage and calls the function 
Cursor c = new SQLiteStorage(this).showAllTables(); 
if (c.moveToFirst()) 
{ 
    while(!c.isAfterLast()) 
    { 
     Log.i(Config.TAG, c.getString(0)); 
     c.moveToNext(); 
    } 
} 
+0

好像會有一個錯誤,如果它缺少表格。你可以試試看看它是否有可能被誤吞的錯誤? – 2014-10-20 20:37:15

回答

4

在你showAllTable功能,即選用所以只能用PR開頭的所有表產品表和產品屬性表顯示在您的查詢中。

變化

字符串的MySQL = 「SELECT姓名FROM SQLITE_MASTER」 + 「WHERE類型= '表'」 + 「和名稱LIKE '%PR_'」;

字符串的MySQL = 「SELECT姓名FROM SQLITE_MASTER」 + 「WHERE類型= '表'」;

+0

哈哈,真的沒有看到。複製/粘貼的危險我想。謝謝! – 2014-10-20 20:44:52