我通过此查询在DB中看到我的表。

(SELECT name
FROM sqlite_master
WHERE type ='table' AND name NOT LIKE 'sqlite_%';)


之后(删除allmytable)
我无法创建表格,...

package com.ariaz.amirmkaa.litner002;

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseManager extends SQLiteOpenHelper {

public DatabaseManager(Context context)
{
    super(context, "myDB", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

    String card_tbl = "CREATE TABLE \"cards_tbl\" (\n" +
            "\t\"id\"\tINTEGER NOT NULL,\n" +
            "\t\"questiontx\"\tTEXT NOT NULL,\n" +
            "\t\"questionpic\"\tBLOB,\n" +
            "\t\"solutiontx\"\tTEXT NOT NULL,\n" +
            "\t\"solutionpic\"\tBLOB,\n" +
            "\t\"days\"\tINTEGER NOT NULL,\n" +
            "\t\"bookid\"\tINTEGER NOT NULL,\n" +
            "\t FOREIGN KEY (bookid)\n" +
            "       REFERENCES book_tbl (bookid)\n" +
            ");";

    db.execSQL(card_tbl);
}

最佳答案

我相信您的问题是onCreate方法仅在首次创建数据库时运行(即如果数据库文件不存在),则只要数据库存在就不会运行。

删除从sqlite_master中提取的所有表并不会删除数据库,数据库将至少具有sqlite_master表,由于受到保护,因此不能删除该表。

删除所有表时,可以调用onCreate方法。


通常,在开发时,在更改应用程序的架构后,您要么删除应用程序的数据,要么取消安装应用程序,这将导致数据库被删除,从而运行onCreate方法。在发布应用程序后进行此类更改时,通常会使用数据库版本(super(context, "myDB", null, 1);中传递的第4个参数)以及opUpdate方法中的适当迁移代码。

08-18 10:05
查看更多