我試圖熟悉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.該方法不拋出, ,當我用adb拉出數據庫並查看它的內容完全是空的。
我只是不明白我錯過了什麼。
任何建議,將不勝感激。
感謝, 小號
非常感謝。現在它可以工作。我真的很想知道如何把事情弄糟,爲什麼插入不會拋出。無論如何,非常感謝! – emitrax 2010-11-13 17:49:04
不客氣。我認爲不會拋出一個異常,因爲你的insert語句沒有什麼特別的錯誤,並且你沒有違反任何表約束等。相反,事情在多個事務調用中混合起來。我將不得不做更多的研究,以瞭解爲什麼嵌套事務的行爲方式如此。我明白爲什麼它不會插入任何東西,但事實上返回一個id是很奇怪的。 – McStretch 2010-11-13 17:56:56
這真的很奇怪! SQLiteOpenHelper的源代碼當然不會打開除數據庫創建和更新之外的任何事務。所以在getWriteableDatabase()調用返回之後,沒有事務處於活動狀態的數據庫!要麼是真的很煩,要麼這個答案是假的。 – Nakedible 2011-05-08 09:46:55