当前位置: 代码迷 >> SQL >> Android-38-SQLiteOpenHelper类
  详细解决方案

Android-38-SQLiteOpenHelper类

热度:72   发布时间:2016-05-05 10:27:37.0
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




  相关解决方案