我通过此查询在 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/