SQLiteトランザクションラーニングレコード
1557 ワード
,
ContentValues values=new ContentValues();
String[] names={" "," "," "," "," "," "};
// DataBaseHelper helper=new DataBaseHelper(DataBaseActivity.this, "test_mars_db");
if(db==null){
db=openOrCreateDatabase("test_mars_db", MODE_WORLD_WRITEABLE, null);
}
db.beginTransaction();//
try {
for(String name:names){
values.put("name", name);
values.put("address", " ");
db.insert("user", null, values);
Log.d(TAG, " :"+values.toString());
}
values.put("name", "test");
// db.insert("users", null, values);////1
// db.execSQL("update user set n='1' where id=2");////2
db.setTransactionSuccessful();// true
} catch (Exception e) {
e.printStackTrace();
}finally{
// try...catch
// db.setTransactionSuccessful(), execSQL
// db.endTransaction()
db.endTransaction(); // , 2 :commit, rollback
}
db.close();
上のコードで少し問題が見つかりました.データベースを構築するとテーブルuserしかありません.赤いタグ1のコードを注釈すると、赤いタグ2のコードが実行され、トランザクションがロールバックし、Logcatには「n」という名前の列がないことを警告する一連の警告が表示されます.しかし逆に,2のコードを注釈し,1のコードを実行することは,存在しないテーブルにデータを挿入することであり,プログラムはエラーを報告するが,トランザクションはロールバックせず,userテーブルにデータを挿入した.何が原因なのか分からないので、どの大侠がはっきりしているのか、教えてください.