AndroidアプリでSQLiteデータベースを使用する方法

2024-07-27

Android アプリでデータベースを使用する

SQLite データベースとは

SQLite は、軽量で使いやすいオープンソースのデータベースエンジンです。Android には SQLite が標準搭載されているため、追加のライブラリをインストールする必要はありません。

データベースの作成

SQLite データベースを作成するには、以下の手順が必要です。

  1. アプリプロジェクトに database という名前のディレクトリを作成します。
  2. データベースファイルを作成します。拡張子は .db です。
  3. データベースファイルへのアクセスを許可するために、データベースファイルのパーミッションを設定します。

データベースへの接続には、SQLiteDatabase クラスを使用します。

SQLiteDatabase db = openOrCreateDatabase("database.db", MODE_PRIVATE, null);

データベースへの接続が確立したら、以下の操作を実行できます。

  • データの挿入
db.execSQL("INSERT INTO table (name, age) VALUES (?, ?)", new String[] {"John", "30"});
  • データの取得
Cursor cursor = db.rawQuery("SELECT * FROM table", null);
while (cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
    // ...
}
  • データの更新
db.execSQL("UPDATE table SET name = ? WHERE age = ?", new String[] {"John", "30"});
  • データの削除
db.execSQL("DELETE FROM table WHERE age = ?", new String[] {"30"});

データベースのクローズ

データベースへの操作が完了したら、データベースを閉じる必要があります。

db.close();

SQLite 以外にも、Android アプリで利用可能なデータベースはいくつかあります。

  • Room: SQLite データベースを抽象化するライブラリ
  • Realm: オブジェクト指向データベース
  • Firebase Realtime Database: リアルタイムデータベース



public class MainActivity extends AppCompatActivity {

    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // データベースを開く
        db = openOrCreateDatabase("database.db", MODE_PRIVATE, null);

        // テーブルを作成する
        db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");

        // データを挿入する
        db.execSQL("INSERT INTO users (name, age) VALUES (?, ?)", new String[] {"John", "30"});

        // データを取得する
        Cursor cursor = db.rawQuery("SELECT * FROM users", null);
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));

            // データを表示する
            Log.d("MainActivity", "name: " + name + ", age: " + age);
        }

        // データベースを閉じる
        db.close();
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

実行方法

  1. Android Studio で新しいプロジェクトを作成します。
  2. 上記のコードを MainActivity.javaactivity_main.xml にコピーします。
  3. アプリを実行します。

説明

  1. openOrCreateDatabase() メソッドを使用して、データベースを開きます。
  2. execSQL() メソッドを使用して、テーブルを作成します。
  3. rawQuery() メソッドを使用して、データを取得します。
  4. close() メソッドを使用して、データベースを閉じます。



Room

Room は、SQLite データベースを抽象化するライブラリです。Room を使用すると、SQL クエリを書くことなく、データベース操作を行うことができます。

メリット

  • SQL クエリを書く必要がない
  • 型安全
  • コード量が少なくなる
  • SQLite よりも機能が少ない
  • 学習コストがかかる

Realm

Realm は、オブジェクト指向データベースです。Realm を使用すると、データベースをオブジェクトとして操作することができます。

  • オブジェクト指向で使いやすい
  • リアルタイム同期
  • 高速なパフォーマンス
  • ライブラリのサイズが大きい
  • オープンソースではない

Firebase Realtime Database

Firebase Realtime Database は、リアルタイムデータベースです。Firebase Realtime Database を使用すると、クライアントとサーバー間のデータ変更をリアルタイムに同期することができます。

  • オフライン対応
  • スケーラビリティ
  • 無料プランではデータ量が制限されている
  • 複雑なクエリが実行できない

選択方法

どの方法を選択するかは、アプリの要件によって異なります。以下の点を考慮して選択してください。

  • アプリで必要な機能
  • 開発者のスキル
  • コスト

android android-sqlite android-database

android sqlite database

Androidアプリでアクティビティの状態を保存する代替方法

Androidアプリでは、ユーザーがアプリを一時停止したり、画面を回転させたりすると、アクティビティが再作成されます。このとき、アクティビティの現在の状態を保持するために、saveInstanceState()メソッドを使用します。オーバーライドする: アクティビティクラスでsaveInstanceState()メソッドをオーバーライドします。


AndroidでTextViewのテキストを水平・垂直方向に中央揃えするコード例

android:gravity属性を使用します。水平方向の中央揃え: android:gravity="center"水平方向の中央揃え: android:gravity="center"TextViewオブジェクトを取得し、setGravityメソッドを使用します。水平方向の中央揃え: textView


Android画面回転時のActivity再起動に関するコード例解説

Androidでは、デバイスの画面が回転すると、デフォルトではActivityが再起動されます。これは、画面の向きが変わった際に、アプリが適切にレイアウトやリソースを調整するためです。レイアウト調整: 画面の向きが変わることで、UI要素の配置やサイズが適切でない場合があるため、再起動してレイアウトを再描画します。


AndroidでBitmapオブジェクトに画像をロードする際のOutOfMemoryErrorについて

OutOfMemoryErrorは、Androidアプリで画像をBitmapオブジェクトにロードする際に発生する一般的な問題です。これは、デバイスのメモリが不足しているため、画像を完全にロードすることができない場合に起こります。画像サイズが大きい: 高解像度またはサイズが非常に大きな画像をロードすると、メモリ不足を引き起こす可能性があります。