我在下面有以下代码。
我正在我的应用程序中创建一个使用 SQLiteOpenHelper 的数据库。我有几个问题,希望能得到一些咨询。在堆栈溢出时没有找到这些的直接答案,因为它们可能是主观的。
1 - 我将在几个活动中使用这个数据库。但是,我不打算将其设为单例以避免泄漏,而是我将在每个方法中获取 getWritableDatabase() 和 getReadableDatabase()。我计划在每个活动的 onDestroy() 中做一个 db.close() 。这是可取的吗?鉴于我的应用程序有几个活动并且不是一个巨大的应用程序。
2 - 我没有遵循 DAO 模型,也没有为每个表使用不同的类。在我看来,我不需要。我吗?
3 - (一个问题而不是咨询)在下面的代码中,我没有创建表单的数据库
private SQLiteDatabase database;
因此,对数据库的所有引用(来自我的活动)都是通过同一子类 SQLiteOpenHelper 中的方法完成的,因此我直接通过 getWritableDatabase 和 getReadableDatabase 引用物理创建的数据库。我需要创建一个 SQLiteDatabase 实例并使用它吗?甚至在 SQLiteOpenHelper 的子类中?
下面是代码。
public class DbHelper extends SQLiteOpenHelper
{
private static final String DATABASE_NAME = "myDbName";
private static final String DATABASE_TABLE = "myTable";
private static final int DATABASE_VERSION = 1;
private Context ctx;
public DbHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.ctx = context;
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE myTable(_id INTEGER PRIMARY KEY, title TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//nothing here now. maybe later.
}
public void insertTitle(String title)
{
ContentValues titleCV = new ContentValues();
titleCV .put("title", title);
getWritableDatabase().insert(DATABASE_TABLE, null, titleCV );
}
public void getTitles()
{
Cursor result = getReadableDatabase().rawQuery("SELECT _id, title FROM myTable", null);
while (result.moveToNext())
{
int id = result.getInt(0);
String titleGotten= result.getString(1);
}
result.close();
}