簡體   English   中英

SQLite僅創建2個表

[英]SQLite only creates 2 tables

由於某些原因,SQLite僅創建兩個表而不是4。我正在使用以下代碼:

@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();
    }
}

在showAllTable函數中,您選擇了所有以PR開頭的表,因此查詢中僅顯示產品表和產品屬性表。

更改

字符串mySql =“從sqlite_master選擇名稱” +“ WHERE type ='table'” +“ AND名稱,如'PR_%'”;

字符串mySql =“從sqlite_master選擇名稱” +“ WHERE type ='table'”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM