326
Сохранность данных
database.beginTransaction();
try {
insertOrUpdate(
database,
DbHelper.BOOKS_TABLE_NAME,
contentValues,
DbHelper.BOOKS_COLUMN_ISBN + " = ? ",
new String[] { book.getIsbn() });
for (String author : book.getAuthors()) {
contentValues = new ContentValues();
contentValues.put(DbHelper.AUTHORS_COLUMN_NAME, author);
database.insertWithOnConflict(DbHelper.AUTHORS_TABLE_NAME, null,
contentValues, SQLiteDatabase.CONFLICT_IGNORE);
}
database.setTransactionSuccessful();
Log.d("MyTag", "wrote data to database");
} catch (Exception e) {
Log.d("MyTag", "there was a problem inserting data: " + e.getMessage());
} finally {
Log.d("MyTag", "finally");
database.endTransaction();
}
}
public static boolean insertOrUpdate(SQLiteDatabase database,
String table,
ContentValues values,
String where, String[] args) {
long rowId = database.insertWithOnConflict(table, null, values,
SQLiteDatabase.CONFLICT_IGNORE);
if (rowId < 0) {
database.update(table, values, where, args);
return false;
}
return true;
}
public static void readAuthors(SQLiteDatabase database, Book book) {
Cursor cursor = database.query(
DbHelper.AUTHORS_TABLE_NAME
+ " join "
+ DbHelper.BRIDGE_TABLE_NAME
+ " on "
+ DbHelper.AUTHORS_TABLE_NAME + "." + DbHelper.AUTHORS_COLUMN_ID
+ " = "
// Строка, имя запрашиваемой таблицы
+ DbHelper.BRIDGE_TABLE_NAME + "." + DbHelper.BRIDGE_COLUMN_AUTHOR_ID,
new String[] { DbHelper.AUTHORS_COLUMN_NAME }, // Строка, массив столбцов
DbHelper.BRIDGE_COLUMN_AUTHOR_ID + " = ?", // Строка, предложение WHERE
new String[] { book.getIsbn() }, // Строка, массив значений для WHERE
null, // GROUP BY
null, // HAVING
null // ORDER BY
);
328
Сохранность данных
database.setTransactionSuccessful()
Log.d("MyTag", "wrote data to database")
} catch (e: Exception) {
Log.d("MyTag", "there was a problem inserting data: " + e.message)
} finally {
Log.d("MyTag", "finally")
database.endTransaction()
}
}
fun insertOrUpdate(database: SQLiteDatabase, table: String,
values: ContentValues, where: String,
args: Array
): Boolean {
val rowId = database.insertWithOnConflict(table, null, values,
SQLiteDatabase.CONFLICT_IGNORE)
if (rowId < 0) {
database.update(table, values, where, args)
return false
}
return true
}
fun readAuthors(database: SQLiteDatabase, book: Book) {
val cursor = database.query(
DbHelper.AUTHORS_TABLE_NAME
+ " join "
+ DbHelper.BRIDGE_TABLE_NAME
+ " on "
+ DbHelper.AUTHORS_TABLE_NAME + "." + DbHelper.AUTHORS_COLUMN_ID
+ " = "
// Строка, имя запрашиваемой таблицы
+ DbHelper.BRIDGE_TABLE_NAME + "." + DbHelper.BRIDGE_COLUMN_AUTHOR_ID,
arrayOf(DbHelper.AUTHORS_COLUMN_NAME), // Строка, массив столбцов
DbHelper.BRIDGE_COLUMN_AUTHOR_ID + " = ?", // Строка, предложение WHERE
arrayOf(book.isbn), null, null, null
)
var i = 0
while (!cursor.isAfterLast) {
cursor.moveToNext()
book.authors[i++] = cursor.getString(0)
}
cursor.close()
}
}
Теперь, имея вспомогательные методы чтения/записи данных
Book
, добавим
в наш класс
DbHelper
чтение содержимого файла
Do'stlaringiz bilan baham: