SQLite API(Android SDK)でデータベースを構築した場合、アクセスはスレッドセーフになります。
この点について、まとめました。
※環境:Android Studio Ladybug | 2024.2.1 Patch 2
Kotlin 2.0.0
※サンプルの全体像は「SQLite APIでデータベースを構築」を参照
スポンサーリンク
OpenとCloseはスレッドセーフ
データベース(識別子)のOpenはスレッドセーフです。
synchronizedブロック(関数)になっているので、ある時刻にSQLiteOpenHelper#getDatabaseLocked( )を実行するスレッドは、一つに制限されます。
private SQLiteDatabase mDatabase;
...
public SQLiteDatabase getWritableDatabase() {
synchronized (this) {
return getDatabaseLocked(true);
}
}
...
private SQLiteDatabase getDatabaseLocked(boolean writable) {
if (mDatabase != null) {
if (!mDatabase.isOpen()) {
// Darn! The user closed the database by calling mDatabase.close().
mDatabase = null;
} else if (!writable || !mDatabase.isReadOnly()) {
// The database is already open for business.
return mDatabase;
}
}
... // データベースをオープンする処理
}
...
また、同様に、データベースのCloseはスレッドセーフです。
private SQLiteDatabase mDatabase;
...
public synchronized void close() {
if (mIsInitializing) throw new IllegalStateException("Closed during initialization");
if (mDatabase != null && mDatabase.isOpen()) {
mDatabase.close();
mDatabase = null;
}
}
...
※OpenとCloseについては「SQLite API Database:データベース(識別子)のOpenとClose」を参照
スポンサーリンク
アクセスはスレッドセーフ
データベースへのアクセスはスレッドセーフです。
異なるスレッドから同時刻にSQLが送られて来ても、マネージメントシステムが正しく処理できるように調整してくれます。

スポンサーリンク
複数スレッドでClose
データベース(識別子)のOpenとClose自体はスレッドセーフなのですが…
マネージメントシステムの処理が終わる前に、識別子をCloseしてしまうと、エラーになります。

※Closeのタイミングについては「SQLite API Database:データベース(識別子)のOpenとClose」を参照
スポンサーリンク
関連記事:
Android JetpackAndroid SDKDatabaseMySQLPostgreSQLRDBMSRelationalRoomSQLSQLiteSQLite APIデザインデータベース永続性
Androidは標準でSQLiteというRDBMS(Relational Database Management System)を扱います。 SQLiteは少し個性的なデータベースです。 データベース全般の説明を通して、SQLiteと他の違いをまとめます。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 Kotlin 2.0.0 ...
データベースを扱うアプリケーションの開発で、動作を確認するためにデータベースの閲覧が出来ると便利です。 データベースは、マネージメントシステムを介してアクセスされるため、プログラムからブラックボックスに見えます。 ですので、データベース内部の問題は見つけ難いです。 デバックおいてデータベースの閲覧が出来れば、内部の問題を用意に確認できます。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 DB Browser for SQLite バージョン 3.13.1 ...
Androidが標準で扱うデータベースはSQLiteです。 ※詳細は「Androidで扱うデータベース」を参照 データベースを構築する方法は「SQLite API(Android SDK)」と「Room(Android Jetpack)」の2通りがあります。 今回は「SQLite API」でデータベースを構築する方法を紹介します。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 Kotlin 2.0.0 ...
アプリケーションが始めて起動した直後に、データの事前取り込み(初期状態の設定)を必要とする場合があります。 事前取り込みの方法ついて、まとめました。 SQLite API(Android SDK)でデータベースを構築した場合です。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
SQLite API(Android SDK)でデータベースを構築した場合、アプリのパフォーマンスを考えると、識別子の共有が必要になってきます。 この点について、まとめました。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
SQLite API(Android SDK)でデータベースを構築した場合、データベースへアクセスする際に、データベースのOpenとCloseという処理を伴います。 この点について、まとめました。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
スポンサーリンク
