首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite只创建2个表

SQLite只创建2个表
EN

Stack Overflow用户
提问于 2014-10-20 20:34:10
回答 1查看 47关注 0票数 0

由于某种原因,SQLite只创建两个表而不是4个表。

代码语言:javascript
复制
@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是可见的,因此它确实尝试创建所有表。它不会显示出任何错误。

我不知道它是否有用,但我正在阅读下面的代码:

代码语言:javascript
复制
//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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-20 20:38:57

在您的showAllTable函数中,您将选择以PR开头的所有表,以便在查询中只显示产品表和产品属性表。

变化

字符串mySql =“从sqlite_master中选择名称”+“其中类型=‘table’‘”+和名称类似于'PR_%’";

字符串mySql =“从sqlite_master中选择名称”+“其中类型=‘table’”;

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26474447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档