S.Pols
S.Pols

Reputation: 3434

SQLite only creates 2 tables

Because of some reason SQLite only creates two tables instead of 4. I'm using this code:

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

The message Recreated database is visible, so it does try to create all tables. It doesn't show any kind of error.

I don't know if it's usefull, but i'm reading the existing tables with the code below:

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

Upvotes: 0

Views: 51

Answers (1)

user1521640
user1521640

Reputation: 151

In your showAllTable function, you are selecting all tables that begin with PR so only the product table and product attribute tables show up in your query.

change

String mySql = " SELECT name FROM sqlite_master " + " WHERE type='table' " + " AND name LIKE 'PR_%' ";

to

String mySql = " SELECT name FROM sqlite_master " + " WHERE type='table'";

Upvotes: 4

Related Questions