Я пытаюсь познакомиться с Android и его API баз данных. Я создал класс, который наследует от SQLiteOpenHelper и это как создать таблицу в базе данныхSQLiteDatabase.insertOrThrow не бросает, но данные не вставлены
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE " + FUELS_TABLE_NAME + " ("
+ "_ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "DATE_OF_FUELS DATE DEFAULT CURRENT_TIME,"
+ "SELLER_POSITION TEXT DEFAULT 'unknown',"
+ "AMOUNT REAL"
+ ");"
);
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
}
}
Функция используется для добавления данных в БД следующее implemeneted в тот же класс
public void addNewFuel(float amount) {
// Create the content to insert into the database
ContentValues newEntry = new ContentValues();
newEntry.put("amount", amount);
// Get database handler
try {
db = getWritableDatabase();
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
return;
}
// Begin transaction and insert data
long returnedValue;
db.beginTransaction();
try {
returnedValue = db.insertOrThrow(FUELS_TABLE_NAME, null, newEntry);
Log.v(DATABASE_NAME, "return value " + returnedValue);
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
} finally {
db.endTransaction();
}
db.close();
}
, но, по-видимому, данные не добавляются. ReturnValue всегда 1. Метод не бросает, и когда я вытаскиваю DB с помощью adb и смотрю, что контент полностью пуст.
Я просто не понимаю, что мне не хватает.
Любое предложение будет оценено.
Спасибо, S
спасибо. Теперь это работает. Мне действительно интересно, как это происходит, и почему вставка не бросается. Во всяком случае, большое спасибо! – emitrax
Добро пожаловать. Я думаю, что исключение не выбрасывается, потому что нет ничего особенного в вашем заявлении insert, и вы не нарушаете никаких ограничений таблицы и т. Д. Вместо этого в нескольких транзакционных вызовах происходит замешательство. Мне нужно будет сделать еще несколько исследований, чтобы понять, почему вложенная транзакция ведет себя так, как она делает. Я понимаю, почему он ничего не вставлял, но тот факт, что id возвращается вообще, является нечетным. – McStretch
Это действительно странно! Исходный код SQLiteOpenHelper, конечно же, не открывает никаких транзакций, кроме создания и обновления базы данных. Поэтому после вызова getWriteableDatabase() транзакции не активны для базы данных! Либо что-то действительно вяло, либо этот ответ фиктивный. – Nakedible