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

标签 java android android-sqlite

我通过此查询在 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 方法。

关于java - 删除数据库中的所有表后,如何在数据库中创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489947/

相关文章:

java.lang.SecurityException : Provider gps requires ACCESS_FINE_LOCATION permission

java - Android 指纹登录 - 可能与否

java - 错误 : java. lang.NumberFormatException:

android - 如何使用 Room 库正确使用 strftime 和 datetime?

android - 如何仅在 Room 实体为空时更新它的列?

java - SQLiteAssetHelper - 如何使用 AssetHelper 将新数据插入现有数据库?

java - 如何使用 Eclipse Juno 查看复杂变量的所有变化

java - 数据库中的表不与外键连接

java - Android 许可证检查失败太多,我做错了什么吗?

java - 在我创建 JPanel 的同一部分绘制网格线?