我通过此查询在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
方法中的适当迁移代码。