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テーブルにデータを挿入した.何が原因なのか分からないので、どの大侠がはっきりしているのか、教えてください.