android - AndroidでのSQLiteデータベースの初期化について混乱

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)getWriteableDatabaseメソッドは、
可能なSQLExceptionをスローします。なぜ私たちは私たちの中に再スローする必要がありますか
オープンメソッド?これには理由がありますか?


open()が失敗する可能性があることを強調するために、このようなランタイム例外を明示的に宣言することは、スタイルの問題です。処理したくない場合は、throws句を削除してください。


2)コンストラクタ/オープンペア全体のポイントは何ですか?何故なの
dbHelperを初期化し、データベースを書き込み可能な状態にします
コンストラクタ?


これにより、データベースを開くというおそらく遅い操作(ディスクIOなど)を実行せずに、インスタンス(高速操作)を作成できます。コードスニペットのように両方を一度に実行するため、ほとんどの場合これは問題になりません。また、これにより、一部の人が好むコンストラクタを例外なしで維持できます。


3)openメソッドでオブジェクトのインスタンスを返す理由
これで返しますか? openメソッドのコードを
コンストラクター、これを返す必要はもうありません。
暗黙的でしょ?ここで何が欠けていますか?


それがコンストラクターに移動された場合、はい、return thisは暗黙的です。 AndroidでDBヘルパークラスを使用する通常の方法は、一度に作成して開くことですが、open()はいくつかの小さなビルダーパターンを実行するだけなので、最も一般的な使用例にTodoDbAdapter helper = new TodoDbAdapter(this).open();を使用できます。

要約すると、これら3つのポイントは主にスタイルに関するものであり、私が考えることができる機能的な理由はほとんどなく、間違いなく他の正しい方法があります。
関連記事

android - Bluetooth:プログラムがconnect()メソッドで動かなくなった

android - 記録とコンテキストの停止

android - プログラムでボタンの状態を設定する

android - AndroidのJSONペイロードを含むHttpDeleteリクエスト

android - ネットワークが利用できない場合でもWebViewコンテンツを保存して表示するにはどうすればよいですか?

java - Java、Androidのローカルストレージのファイル

android - カーソル値を増やす方法は?

android - cmdが自動的に実行されます->シェルコマンドがAndroidのsqliteデータベースを表示します

java - MD5フィンガープリントを生成する方法

android - インストルメンテーションターゲットパッケージが見つかりません:com.android.cts.stub