
为了避免在每个请求中打开/关闭 *** 作,我创建了一个使用Singleton设计模式扩展sqliteOpenHelper的类.这样,我确定只有一个sqliteOpenHelper实例,并且在所有应用程序生命周期(而不仅仅是活动生命周期)中只有一个到数据库的连接.
我也读了一些关于ContentProvIDer的文章,但我不知道这是一个更好的方法.
所以,这是我的Singleton类的主要逻辑(onCreate和onUpgrade删除):
public final class Basesqlite extends sqliteOpenHelper { private static Basesqlite mInstance = null; private sqliteDatabase db = null; public static Basesqlite getInstance(Context context) { if (mInstance == null) { mInstance = new Basesqlite(context.getApplicationContext(),DBname,DBVERSION); } return mInstance; } private Basesqlite(final Context context,final String name,final int version) { super(context,name,null,version); db = getWritableDatabase(); } @OverrIDe public synchronized voID close() { if (mInstance != null) db.close(); } public Cursor getAllData() { String buildsql = "SELECT * FROM mytable"; return db.rawquery(buildsql,null); }} 所以,要访问我的数据库,我做了:
Basesqlite basesqlite = Basesqlite.getInstance(context);basesqlite.getAllData();
它现在工作完美.但我的问题是关于close()方法.我真的不知道什么时候打电话.实际上,我的数据库实例对于我的应用程序的每个ActivIEs都是一样的,所以我认为在onPause()方法中调用close()是一个坏主意,因为实例将会在( onStart()方法的下一个Activity.此外,我无法检测到我的应用程序的结束,即当屏幕上没有任何活动可见时.
有人可以给我一些关于这个问题的帮助吗?当数据库与ONE活动相关联时,我发现了一些答案,但对我的情况没有提供任何真正的提示.
解决方法 您完成写入数据库的任何时间都应该调用close.例如,当您插入数据时,您将有一个打开的连接到数据库,完成后应该关闭.阅读是不同的.当您在手机上创建sqlite数据库时,数据是持久的.数据库存在,您创建的处理程序提供了访问该信息的便捷方式.读取数据库通常通过获取数据库的可读实例并使用Cursor来提取值来进行.在这种情况下,您完成后关闭光标,而不是数据库本身.
你是对的,你不应该在单独的活动的生命周期方法中关闭数据库连接.相反,如上所述,在执行该事务完成后,关闭在处理程序的方法中写入数据库的数据库连接.
总结以上是内存溢出为你收集整理的android – 使用Singleton设计模式正确打开/关闭数据库全部内容,希望文章能够帮你解决android – 使用Singleton设计模式正确打开/关闭数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)