【AndroidでSQLiteを制する】SQLiteDatabase#replaceを使用してデータをリプレースする
SQLデータベース内のテーブルにデータを挿入または更新します。
今回はSQLiteDatabaseに定義されているリプレースを行うコンビニエンスメソッドを使用します。
SQLiteDatabase#replaceを使用する
SQLiteDatabase#replaceをデータベース内のテーブルにデータを挿入または更新するコンビニエンスメソッドです。リプレースするデータの主キーが存在しない場合は挿入し、主キーが存在する場合はその行に対して更新を行います。
| String table | データベース内のテーブル名を指定します。 |
| String nullColumnHack |
SQLでは完全に空の行を挿入することは許されていません。
この引数は第3引数に空のContentValuesを指定された場合に意味を持ちます。
このメソッドはContentValuesが空の場合はインサート文を作成することができないため、この引数に適当なカラム名を指定します。
下記のようなSQLが生成されます。 INSERT OR REPLACE INTO [table名] ([nullColumnHack]) VALUES (NULL); |
| ContentValues initialValues |
ContentValuesを使用してリプレースするデータを設定して渡します。 ContentValues#putの第1引数にテーブルのカラム名を、第2引数にはデータを設定します。 |
BookDAOにreplaceを実装する
また、BookDTOをContentValuesに変換するメソッドを実装します。
public static long replace(Context context , BookDTO bookDTO){
SQLiteDatabase sqLiteDatabase = getSqLiteDatabase(context,true);
long rowId = sqLiteDatabase.replace(
LoadToSQLiteMasterContract.Book.TABLE_NAME,
COLUMN_NAME_SUBTITLE,
convertContentValues(bookDTO)
);
return rowId;
}
SQLiteActivityにBookDAO.replaceを使用するreplaceBookを実装する。
private void replaceBook(BookDTO book) {
long rowId = BookDAO.replace(getApplicationContext() , book);
Toast.makeText(this, "rowId:" + rowId , Toast.LENGTH_SHORT).show();
}
SQLiteDatabase#replaceOrThrowBookを使用する
SQLiteDatabase#replaceOrThrowBookはデータベース内のテーブルにデータを挿入または更新するコンビニエンスメソッドです。リプレースするデータの主キーが存在しない場合は挿入し、主キーが存在する場合はその行に対して更新を行います。
| String table | データベース内のテーブル名を指定します。 |
| String nullColumnHack |
SQLでは完全に空の行を挿入することは許されていません。
この引数は第3引数に空のContentValuesを指定された場合に意味を持ちます。
このメソッドはContentValuesが空の場合はインサート文を作成することができないため、この引数に適当なカラム名を指定します。
下記のようなSQLが生成されます。 INSERT OR REPLACE INTO [table名] ([nullColumnHack]) VALUES (NULL); |
| ContentValues initialValues |
ContentValuesを使用してリプレースするデータを設定して渡します。 ContentValues#putの第1引数にテーブルのカラム名を、第2引数にはデータを設定します。 |
BookDAOにreplaceOrThrowを実装する
public static long replaceOrThrow(Context context , BookDTO bookDTO){
SQLiteDatabase sqLiteDatabase = getSqLiteDatabase(context,true);
long rowId = sqLiteDatabase.replaceOrThrow(
LoadToSQLiteMasterContract.Book.TABLE_NAME ,
COLUMN_NAME_SUBTITLE,
convertContentValues(bookDTO)
);
Toast.makeText(context, "rowId:" + rowId , Toast.LENGTH_SHORT).show();
return rowId;
}
SQLiteActivityにBookDAO.replaceOrThrowを使用するreplaceOrThrowBookを実装する。
private void replaceOrThrowBook(BookDTO book) {
long rowId = BookDAO.replaceOrThrow(getApplicationContext() , book);
Toast.makeText(this, "rowId:" + rowId , Toast.LENGTH_SHORT).show();
}