Android---38---SQLiteOpenHelper类

SQLiteOpenHelper:是Android提供的一个管理数据库的工具类,可用于管理数据库的创建和版本更新。
是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。




方法:
onCreate():
用于初次使用软件的时候生成数据库表。
当获取到SQLiteDatabase实例时,如果数据库不存在,Android系统会自动生成一个数据库,紧接着调用onCreate方法。
onUpgrade():
用于升级软件时更新数据库表结构,方法在数据库版本发生变化时调用。




getReadableDatabase ():以读写的方式打开数据库对应的SQLiteDatabase对象。
getWriteableDatabase():以读的方式打开数据库对应的SQLiteDatabase对象。


这两个方法都可以打开或者创建一个数据库,并返回一个可以对数据库进行读写操作的对象。
不同的是,当数据库不可写入的时候(如:磁盘空间已满)getReadableDatabase()方法返回的对象以只读的方式去打开数据库
而getWriteableDatabase()方法则会出现异常。




Cursor:游标结果集


PersonSQliteOpenHelper.java:


public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

	/**
	 * 数据库的构造函数
	 * 
	 * @param context
	 * 
//	 *name:数据库名称 
//	 *factory:游标工厂 
//	 *version:数据库版本号 >=1
	 */
	public PersonSQLiteOpenHelper(Context context ) {
		super(context, "mydb.db3",null, 1);
		// TODO Auto-generated constructor stub
	}

	/**
	 * 数据库第一次创建时调用的方法
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub

		String sql = "create table person(_id integer ,name varchar(20),age integer);";
		db.execSQL(sql);//创建person表
		
	}

	/**
	 * 数据库版本号更新时调用方法
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

PersonDao.java:


public class PersonDao {

	public static PersonSQLiteOpenHelper mHelper;

	public PersonDao(Context context) {
		// TODO Auto-generated constructor stub
		mHelper = new PersonSQLiteOpenHelper(context);
	}

	// 添加到person 一条数据
	public void insert(Person person) {

		SQLiteDatabase db = mHelper.getWritableDatabase();
		if (db.isOpen()) {// 如果数据库打开,执行插入操作

			// String sql = "insert into person(name, age) values ('lisi',12);";
			db.execSQL("insert into person(name,age) values (?,?)",
					new Object[] { person.getName(), person.getAge() });
			db.close();
		}
	}

	public void delete(int id) {
		SQLiteDatabase db = mHelper.getWritableDatabase();

		if (db.isOpen()) {
			db.execSQL("delete from person where _id = ?", new Integer[] { id });
			db.close();
		}
	}

	public void update(int id ,String name) {
		SQLiteDatabase db = mHelper.getWritableDatabase();

		if (db.isOpen()) {
			db.execSQL("update person set name = ? where _id = ?",
					new Object[] { name, id });
			db.close();
		}
	}

	public List<Person> queryAll() {

		SQLiteDatabase db = mHelper.getReadableDatabase();
		if (db.isOpen()) {
			// db.execSQL("select * from person ;");

			Cursor cursor = db.rawQuery("select _id ,name , age from person ;",
					null);

			int id, age;
			String name;

			if (cursor != null && cursor.getColumnCount() > 0) {

				List<Person> personList = new ArrayList<Person>();

				while (cursor.moveToNext()) {
					id = cursor.getInt(0);
					name = cursor.getString(1);
					age = cursor.getInt(2);

					personList.add(new Person(id, name, age));

				}

				db.close();
				return personList;
			}

			db.close();
		}
		return null;
	}

	public Person queryItem(int id) {

		SQLiteDatabase db = mHelper.getReadableDatabase();

		if (db.isOpen()) {

			int _id;
			String name;
			int age;
			Cursor cursor = db.rawQuery(
					"select _id,name,age from person where _id = ?",
					new String[] { id + "" });

			if (cursor != null && cursor.moveToFirst()) {
				_id = cursor.getInt(0);
				name = cursor.getString(1);
				age = cursor.getInt(2);

				db.close();
				return new Person(_id, name, age);

			}

			db.close();
		}

		return null;
	}

}


Testcase.java:

import java.util.List;

import dao.PersonDao;
import entities.Person;
import DB.PersonSQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;
import android.util.Log;

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

	public void test() {
		// 数据库什么时候创建
		// 调用这个方法,数据库是不会创建的
		PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(
				getContext());
		// 此时才创建,并执行onCreate方法
		openHelper.getReadableDatabase();

	}

	public void testInsert() {
		PersonDao dao = new PersonDao(getContext());
		dao.insert(new Person(0, "guanxi", 77));
	}

	public void testDelete() {
		PersonDao dao = new PersonDao(getContext());
		dao.delete(1);

	}

	public void testUpdate() {
		PersonDao dao = new PersonDao(getContext());

		dao.update(1, "fengjie");
	}

	public void testQueryAll() {
		PersonDao dao = new PersonDao(getContext());
		List<Person> persons = dao.queryAll();

		for (Person person : persons) {
			Log.i(TAG, person.toString());
		}
	}

	public void testQueryItem() {
		PersonDao dao = new PersonDao(getContext());
		Person person = dao.queryItem(1);
		Log.i(TAG, person.toString());
	}

}




此程序源码:http://pan.baidu.com/s/1hqrgwGO




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。