【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(); }