为什么创建 SQLite 数据库需要 getWritableDatabase()?

Why is getWritableDatabase() necessary to create a SQLite database?

我想创建一个 SQLite 数据库。
所以我按照教程进行操作,在我的 MainActivity 中有这两行创建数据库。

LugaresDB lugaresDB = new LugaresDB(getApplicationContext());
SQLiteDatabase db = lugaresDB.getWritableDatabase();

我的问题:我只希望第一行创建数据库,但它并没有创建它。
我必须添加第二行。为什么?

因为框架就是这样实现的。

不可能确切地说出为什么要这样实现,但通常遵循single responsibility and least astonishment的原则是一个很好的设计思想:构造函数只负责对象实例的初始化。任何其他操作(例如实际使用文件 I/O 打开数据库)都是不需要的副作用。这些其他操作最好建模为名称中带有动词的方法。

因为那是 class 的实现方式。您的 LugaresDB 似乎是 SQLiteOpenHelper 的子 class。第一行创建 class SQLiteOpenHelper 的辅助对象,可用于创建 SQLiteDatabase 的只读或可写实例,这就是第二行的作用。