gpt4 book ai didi

java - SQLite只创建2个表

转载 作者:行者123 更新时间:2023-12-01 18:25:11 25 4
gpt4 key购买 nike

由于某种原因,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);
}

消息重新创建数据库是可见的,因此它确实尝试创建所有表。它没有显示任何类型的错误。

我不知道它是否有用,但我正在使用以下代码阅读现有表格:

//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 开头的所有表,因此查询中仅显示产品表和产品属性表。

改变

String mySql = "从 sqlite_master 中选择名称 "+ "WHERE type='table' " + "和名称如 'PR_%' ";

String mySql = "从 sqlite_master 中选择名称 "+ "WHERE type='table'";

关于java - SQLite只创建2个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com