从片段中我以这种方式实例化
fmdata = new FileManagerData(getActivity());
以下课程。我不明白为什么没有调用onCreate()并且我的数据库没有被创建。
public class FileManagerData {
public static final String TAG = FileManagerData.class.getSimpleName();;
Context context;
DBHelper dbHelper;
public FileManagerData (Context context){
this.context = context;
dbHelper = new DBHelper();
}
private class DBHelper extends SQLiteOpenHelper{
private static final String DB_NAME = "filename.db";
private static final String DB_SQL = "filename.sql";
private static final int DB_VERSION = 1; // internal number
public DBHelper() {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// this is NEVER called and my DB does not exist yet
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
编辑 :诀窍是必须使用数据库(读取或写入),以便调用onCreate()。
答案 0 :(得分:11)
首次访问数据库后,将调用onCreate
方法。对数据库进行查询,将调用onCreate
。
答案 1 :(得分:3)
可能数据库存在于较早的尝试中。
卸载您的应用并重试。
答案 2 :(得分:0)
你应该投入创造这个:
sqLiteDatabase.execSQL("create table" + DB_NAME + " ( _id integer primary key autoincrement, " + fieldOne + "INTEGER, " + fieldTwo + "INTEGER);");
其中fieldOne和fieldTwo是表格列的名称。另见: http://www.sqlite.org/datatype3.html
答案 3 :(得分:0)
我知道这个帖子已经接受了答案。毫无疑问,这是我必须补充的:
我有: protected class OpenHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
try {
MHSqlDb.this.createTables(db);
} catch (Exception e) {
e.printStackTrace();
}
}
我在说这个:
iOpenHelper = new OpenHelper(iDbFileName, DATABASE_VERSION );
此阶段不存在databese文件。
然后我做了一些app的调试。 我从不打电话
iOpenHelper.getReadableDatabase();
我都不打电话
iOpenHelper.getWritableDatabase();
数据库文件仍然不存在。现在,当我从调试器中删除应用程序时,我可以突然看到创建了数据库文件(名称在iDbFileName中)。从不调用OpenHelper的onCreate方法。
因此,虽然我同意onCreate方法的意图似乎是在数据库文件不存在时被调用,并且调用了getReadableDatabase()或getWritableDatabase(),但显然情况并非如此。
答案 4 :(得分:0)
卸载应用程序将删除数据库,因此将在下次运行时调用onCreate。