繁体   English   中英

删除数据库中的所有表后,如何在数据库中创建表?

[英]How can I create a table in my DB, after dropping all of my tables in database?

我用这个查询在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);传递的第四个参数)以及opUpdate方法中的适当迁移代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM