Android学习笔记(十二)

SQLite事物处理

 

PersonService

package org.wp.service;

/**
 * 
 * 使用SQLiteDatabase的beginTransaction()方法可以开启一个事务
 * 程序执行到endTransaction() 方法时会检查事务的标志是否为成功
 * 如果为成功则提交事务,否则回滚事务
 * 当应用需要提交事务,必须在程序执行到endTransaction()方法之前
 * 使用setTransactionSuccessful() 方法设置事务的标志为成功
 * 如果不调用setTransactionSuccessful() 方法,默认会回滚事务
 * 
 */

import java.util.ArrayList;
import java.util.List;
import org.wp.domain.Person;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class PersonService {

	private static final String TAG = "PersonService";

	private DataBaseOpenHelper dataBaseOpenHelper;
	private SQLiteDatabase database;

	public PersonService(Context context) {
		dataBaseOpenHelper = new DataBaseOpenHelper(context);
	}

	public void save() {
		database = dataBaseOpenHelper.getWritableDatabase();
		// 开始事务
		database.beginTransaction();
		try {
			database.execSQL("insert into person(name,age) values(?,?)",
					new Object[] { "张三", (short) 26 });
			database.execSQL("insert into person(name,age) values(?,?)",
					new Object[] { "田七", (short) 35 });
			// 调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
			database.setTransactionSuccessful();
		} catch (Exception e) {
			Log.i(TAG, e.toString());
		}
		// 由事务的标志决定是提交事务,还是回滚事务
		database.endTransaction();
	}

	public List<Person> getScrollData(int startResult, int maxResult) {
		List<Person> persons = new ArrayList<Person>();
		database = dataBaseOpenHelper.getReadableDatabase();
		Cursor cursor = database.rawQuery("select * from person limit ?,?",
				new String[] { String.valueOf(startResult),
						String.valueOf(maxResult) });
		while (cursor.moveToNext()) {
			persons.add(new Person(cursor.getInt(0), cursor.getString(1),
					cursor.getShort(2)));
		}
		return persons;
	}

}

 

PersonServiceTest

package org.wp.db;

import java.util.List;
import org.wp.domain.Person;
import org.wp.service.PersonService;
import android.test.AndroidTestCase;
import android.util.Log;

public class PersonServiceTest extends AndroidTestCase {
	private static final String TAG = "PersonServiceTest";

	public void testSave() {
		PersonService personService = new PersonService(this.getContext());
		personService.save();
	}

	public void testGetScrollData() throws Exception {
		PersonService personService = new PersonService(this.getContext());
		List<Person> persons = personService.getScrollData(0, 30);
		for (Person person : persons) {
			Log.i(TAG, person.toString());
		}
	}
}

 

 

 

你可能感兴趣的:(android,sqlite)