Android アプリで SQLite クエリを実行する方法
Android アプリケーションで SQLite クエリを実行する方法
SQLiteOpenHelper クラスは、SQLite データベースへの読み書きアクセスを提供するヘルパークラスです。 このクラスを使用するには、以下の手順が必要です。
SQLiteOpenHelper
を継承するクラスを作成します。onCreate()
メソッドで、データベースを作成します。getReadableDatabase()
またはgetWritableDatabase()
メソッドを使用して、データベースへの読み書きアクセスを取得します。rawQuery()
またはexecSQL()
メソッドを使用して、クエリを実行します。
以下は、SQLiteOpenHelper クラスを使用してクエリを実行する例です。
public class MyDatabaseHelper extends SQLiteOpenHelper {
public MyDatabaseHelper(Context context) {
super(context, "my_database", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// データベースのスキーマを更新する処理
}
public Cursor queryUsers() {
SQLiteDatabase db = getReadableDatabase();
return db.rawQuery("SELECT * FROM users", null);
}
}
Room ライブラリは、Android アプリケーションで SQLite データベースを操作するためのライブラリです。 Room を使用するには、以下の手順が必要です。
- 依存関係をプロジェクトに追加します。
- エンティティクラスを作成します。
- データアクセスオブジェクト (DAO) インターフェースを作成します。
- DAO インターフェースの実装を作成します。
- Room データベースクラスを作成します。
- クエリを実行します。
以下は、Room ライブラリを使用してクエリを実行する例です。
@Entity
public class User {
@PrimaryKey
public int id;
public String name;
public int age;
}
@Dao
public interface UserDao {
@Query("SELECT * FROM users")
List<User> getAllUsers();
}
@Database(entities = {User.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
public class MainActivity {
public void onCreate(Bundle savedInstanceState) {
MyDatabase database = Room.databaseBuilder(this, MyDatabase.class, "my_database").build();
UserDao userDao = database.userDao();
List<User> users = userDao.getAllUsers();
}
}
Android アプリケーションで SQLite クエリを実行するには、いくつかの方法があります。 上記で説明した 2 つの方法は、最も一般的な方法です。 どちらの方法を使用するかは、プロジェクトの要件によって異なります。
SQLiteOpenHelper クラスを使用する
public class MyDatabaseHelper extends SQLiteOpenHelper {
public MyDatabaseHelper(Context context) {
super(context, "my_database", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// データベースのスキーマを更新する処理
}
public Cursor queryUsers() {
SQLiteDatabase db = getReadableDatabase();
return db.rawQuery("SELECT * FROM users", null);
}
public void insertUser(String name, int age) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
db.insert("users", null, values);
}
public void updateUser(int id, String name, int age) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
db.update("users", values, "id = ?", new String[] { String.valueOf(id) });
}
public void deleteUser(int id) {
SQLiteDatabase db = getWritableDatabase();
db.delete("users", "id = ?", new String[] { String.valueOf(id) });
}
}
Room ライブラリを使用する
@Entity
public class User {
@PrimaryKey
public int id;
public String name;
public int age;
}
@Dao
public interface UserDao {
@Query("SELECT * FROM users")
List<User> getAllUsers();
@Query("SELECT * FROM users WHERE id = :id")
User getUserById(int id);
@Insert
void insertUser(User user);
@Update
void updateUser(User user);
@Delete
void deleteUser(User user);
}
@Database(entities = {User.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
public class MainActivity {
public void onCreate(Bundle savedInstanceState) {
MyDatabase database = Room.databaseBuilder(this, MyDatabase.class, "my_database").build();
UserDao userDao = database.userDao();
// 全てのユーザーを取得
List<User> users = userDao.getAllUsers();
// ID でユーザーを取得
User user = userDao.getUserById(1);
// ユーザーを挿入
User newUser = new User();
newUser.name = "John Doe";
newUser.age = 30;
userDao.insertUser(newUser);
// ユーザーを更新
user.name = "Jane Doe";
userDao.updateUser(user);
// ユーザーを削除
userDao.deleteUser(user);
}
}
SQLite クエリを実行するその他の方法
CursorLoader クラスは、SQLite データベースからデータをロードするためのヘルパークラスです。 CursorLoader を使用するには、以下の手順が必要です。
CursorLoader
を継承するクラスを作成します。loadInBackground()
メソッドで、クエリを実行します。onDeliverResult()
メソッドで、結果を返します。
public class MyCursorLoader extends CursorLoader {
public MyCursorLoader(Context context) {
super(context);
}
@Override
public Cursor loadInBackground() {
SQLiteDatabase db = getReadableDatabase();
return db.rawQuery("SELECT * FROM users", null);
}
@Override
public void onDeliverResult(Cursor cursor) {
// 結果を処理する処理
}
}
ContentProvider クラスは、異なるアプリケーション間でデータを共有するためのクラスです。 ContentProvider を使用するには、以下の手順が必要です。
query()
メソッドで、クエリを実行します。
public class MyContentProvider extends ContentProvider {
public MyContentProvider() {
}
@Override
public boolean onCreate() {
SQLiteDatabase db = getReadableDatabase();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = getReadableDatabase();
return db.rawQuery("SELECT * FROM users", null);
}
}
第三者ライブラリを使用する
SQLiteOpenHelper クラスや Room ライブラリ以外にも、SQLite データベースを操作するための第三者ライブラリがいくつかあります。 以下は、人気のあるライブラリの例です。
これらのライブラリは、SQLiteOpenHelper クラスや Room ライブラリよりも多くの機能を提供する場合があります。 ただし、これらのライブラリを使用するには、ライブラリの使用方法を学ぶ必要があります。
android sqlite android-sqlite