对Android中SQLite数据库的初始化感到困惑

时间:2011-09-29 20:59:21

标签: android database sqlite

要在我的应用程序中实现数据库访问,我跟着Lars Vogel tutorial,但我对一些事情感到很困惑......

TodoDbAdapter类具有以下构造函数和open方法:

public TodoDbAdapter(Context context) {
    this.context = context;
}

public TodoDbAdapter open() throws SQLException {
    dbHelper = new TodoDatabaseHelper(context);
    database = dbHelper.getWritableDatabase();
    return this;
}

然后应该像这样初始化这个适配器:

dbAdapter = new TodoDbAdapter(this);
dbAdapter.open();

1) getWriteableDatabase方法是通过抛出可能的SQLException来负责的方法。为什么我们需要在我们的开放方法中重新抛出?有这个原因吗?

2)整个构造函数/开放对的重点是什么?为什么不初始化dbHelper并准备好在构造函数中编写数据库?

3)为什么我们使用return this在open方法中返回对象的实例?如果要将open方法代码移动到构造函数中,我们就不再需要return this,它将是隐含的,对吧?我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

  

1)getWriteableDatabase方法是负责人   抛出可能的SQLException。为什么我们需要重新考虑我们的   打开方法?有这个原因吗?

显式声明运行时异常是一种风格问题,以突出显示open()可能失败。如果您不想处理它,请删除throws子句。

  

2)整个构造函数/开放对的重点是什么?为什么不   初始化dbHelper并准备好在数据库中写入数据库   构造

这允许您创建实例(快速操作)而不必强制执行打开数据库的可能较慢的操作(磁盘IO等);大部分时间这都无关紧要,因为你会像在你的代码片段中一样进行。此外,这使构造函数保持无异常,这是一些人喜欢的。

  

3)为什么我们在open方法中返回对象的实例   还有这个吗?如果将打开的方法代码移动到   构造函数,我们不再需要返回这个,它会   隐含的,对吗?我在这里缺少什么?

如果它被移入构造函数中,那么return this将是隐含的。由于在Android中使用DB帮助程序类的常用方法是一次性创建和打开它,open()只需执行一些小构建器模式,因此您可以使用TodoDbAdapter helper = new TodoDbAdapter(this).open();获取最常见的用例。 / p>

总结一下:你的这三点主要是关于风格,我能想到的功能性原因很少,其他方法也是正确的。