Android 在另一个类中使用SQLiteOpenhelper-不调用OnCreate()
Android 在另一个类中使用SQLiteOpenhelper-不调用OnCreate(),android,database,sqlite,database-connection,Android,Database,Sqlite,Database Connection,AbstractDbAdapter中有一个类,它扩展了SQLiteOpenHelper。当我调用它时,它调用默认构造函数,但不输入onCreate()函数。我成功地手动创建了DB,因此我确信所有SQL查询都是正确的。为什么不调用onCreate??这和班级里的班级有关吗 public abstract class AbstractDbAdapter { public static DatabaseHelper mDbHelper = null; public static
AbstractDbAdapter
中有一个类,它扩展了SQLiteOpenHelper
。当我调用它时,它调用默认构造函数,但不输入onCreate()
函数。我成功地手动创建了DB,因此我确信所有SQL查询都是正确的。为什么不调用onCreate??这和班级里的班级有关吗
public abstract class AbstractDbAdapter {
public static DatabaseHelper mDbHelper = null;
public static SQLiteDatabase mDb = null;
private static int mReferenceCount = 0;
public static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context,DATABASE_TABLE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try{
mDb.execSQL(SCREATE_SOME_TABLE);
//"Database creation successful"
}
catch(Exception ex) {
//"Database creation failed"
}
// "Database creation successful"
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
mDb.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_NAME);
this.onCreate(mDb);
}
}
/**
*
*
* @return this
* @throws SQLException
* if the database could be neither opened or created
*/
public AbstractDbAdapter open() throws SQLException {
if( mReferenceCount == 0 ) {
if( mDbHelper == null )
mDbHelper = new DatabaseHelper(//getting main activity context);
if( mDb == null || mDb.isOpen() == false )
mDb = mDbHelper.getWritableDatabase();
}
mReferenceCount++;
return this;
}
在帮助程序上调用getWritableDatabase()
或getReadableDatabase()
时,将调用onCreate()
,并且数据库文件不存在。如果文件已经存在并且版本号是请求的版本号,则不会调用诸如onCreate()
之类的回调
无论如何,在onCreate()
中捕获异常也是个坏主意。如果方法成功返回(未抛出),则框架认为数据库已成功创建。onCreate()
在帮助程序上调用getWritableDatabase()
或getReadableDatabase()
时,将调用该数据库文件。如果文件已经存在并且版本号是请求的版本号,则不会调用诸如onCreate()
之类的回调
无论如何,在onCreate()
中捕获异常也是个坏主意。如果方法成功返回(未抛出),则框架认为数据库已成功创建。onCreate()
在帮助程序上调用getWritableDatabase()
或getReadableDatabase()
时,将调用该数据库文件。如果文件已经存在并且版本号是请求的版本号,则不会调用诸如onCreate()
之类的回调
无论如何,在onCreate()
中捕获异常也是个坏主意。如果方法成功返回(未抛出),则框架认为数据库已成功创建。onCreate()
在帮助程序上调用getWritableDatabase()
或getReadableDatabase()
时,将调用该数据库文件。如果文件已经存在并且版本号是请求的版本号,则不会调用诸如onCreate()
之类的回调
无论如何,在
onCreate()
中捕获异常也是个坏主意。如果方法成功返回(未抛出),则框架认为数据库已成功创建。在onCreate()和onUpgrade()中,您使用了错误的数据库引用。您应该使用这些方法接收的数据库引用作为其参数,在您的情况下是db,但您使用的mDb是错误的在onCreate()和onUpgrade()中,您使用的数据库引用是错误的。您应该使用这些方法接收的数据库引用作为其参数,在您的情况下是db,但您使用的mDb是错误的在onCreate()和onUpgrade()中,您使用的数据库引用是错误的。您应该使用这些方法接收的数据库引用作为其参数,在您的情况下是db,但您使用的mDb是错误的在onCreate()和onUpgrade()中,您使用的数据库引用是错误的。您应该使用这些方法接收的数据库引用作为其参数,在您的情况下是db,但您使用的mDb是错误的调用时调用getWritableDatabase
/getReadableDatabase
onCreate
/onUpgrade
调用时调用getWritableDatabase
getReadableDatabaseonCreate
/onUpgrade
getWritableDatabase
/getReadableDatabase