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