Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLiteOpenHelper.getWritableDatabase的使用_Android_Design Patterns - Fatal编程技术网

Android SQLiteOpenHelper.getWritableDatabase的使用

Android SQLiteOpenHelper.getWritableDatabase的使用,android,design-patterns,Android,Design Patterns,据 一旦成功打开,数据库将被缓存,因此您可以调用 方法,每次需要写入数据库时 考虑以下代码段: SQLiteDatabase db1 = openHelperImplObj.getWritableDatabase(); // do something with db1 SQLiteDatabase db2 = openHelperImplObj.getWritableDatabase(); // do something with db2 db2.close(); // do something

一旦成功打开,数据库将被缓存,因此您可以调用 方法,每次需要写入数据库时

考虑以下代码段:

SQLiteDatabase db1 = openHelperImplObj.getWritableDatabase();
// do something with db1
SQLiteDatabase db2 = openHelperImplObj.getWritableDatabase();
// do something with db2
db2.close();
// do something with db1
db1.close();

我假设对getWritableDatabase的第二次调用将返回与db1相同的缓存DB,行db2.close不会对以后发生的db1操作造成任何问题吗?如果是这样,建议如何避免此类问题,因为第二次调用可能发生在任何地方,即在不同的函数中,甚至在不同的类中。

当您使用db openHelperImplObj.getWritableDatabase打开数据库时; 那么下面的事情检查一下

1> 若并没有创建数据库,那个么它将创建数据库并以写模式打开它,否则先创建数据库,然后打开

2> 第二,也是最重要的一点,我观察到,如果数据库已经创建,那么它就打开了,但如果它已经打开,那么它什么也不做,这意味着它占用了旧的数据实例 在关闭数据库之前,先关闭打开的数据库。这就是为什么关闭数据库后再关闭数据库更好的做法 使用超过


希望您仔细想想,我想我必须避免在代码中的任何地方直接使用/引用SQLiteDatabase,但只允许使用最少数量的指定类来完成直接处理SQLiteDatabase的工作。这听起来不像是Android特有的问题,更像是一个一般的设计问题。