1.SQLiteOpenHelper类
管理数据库的工具类,用于创建和管理数据库,更新数据库
构造类:参数1:上下文;参数2:数据库名称;参数3:游标工程;参数4:版本号,大于1abstract void onCreate(SQLiteDatabase db):数据库创建时执行(第一次连接获取数据库对象时执行),执行时间:调用SQLiteOpenHelper的getWritableDatabase()或getReadableDatabase()获取SQLitebase时,若数据库不存在时调用。abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):数据库更新时执行(版本号改变时才执行)onOpen:数据库每次打开时执行(每次打开数据库之后调用,在onCreate与onUpgrade之后调用)synchronzied SQLiteDatabase getReadableDatabase():以读写方式打开数据库对应的SQLiteDatabase对象
synchronzied SQLiteDatabase getWritableDatabase():以读写方式打开数据库对应的SQLiteDatabase对象
两者区别:
其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。
getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。
2.事务
SQLiteDatabase.beginTransaction();//开启事务
SQLiteDatabasesetTransactionSuccessful();//标记成功
SQLiteDatabase.endTransaction();//停止事务
备注:在事务中执行大量SQL语句时,执行速度会大大提高。建议在事务中执行SQL语句
3.操作数据库
例子1: //SQLiteDatabase db; db.execSQL(sql);1.db.execSQL("delete from person where _id = ?;", new Integer[]{id});
2.db.execSQL("update person set name = ? where _id = ?;", new Object[]{name, id});
3.db.execSQL("insert into person(name, age) values(?, ?);", new Object[]{person.getName(), person.getAge()});
4.Cursor cursor = db.rawQuery("select _id, name, age from person;", null);
if(cursor != null && cursor.getCount() > 0) {//if(cursor != null && cursor.moveToFirst()) {while(cursor.moveToNext()) {
id = cursor.getInt(0);}}
例子2:
使用特定方法操作数据库
/** * 添加到person表一条数据 * @param person */ public void insert(Person person) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 ContentValues values = new ContentValues(); values.put("name", person.getName()); // key作为要存储的列名, value对象列的值 values.put("age", person.getAge()); long id = db.insert("person", "name", values); Log.i(TAG, "id: " + id); db.close(); // 数据库关闭 } } /** * 更据id删除记录 * @param id */ public void delete(int id) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象 if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 String whereClause = "_id = ?"; String[] whereArgs = {id + ""}; int count = db.delete("person", whereClause, whereArgs); Log.i(TAG, "删除了: " + count + "行"); db.close(); // 数据库关闭 } } /** * 根据id找到记录, 并且修改姓名 * @param id * @param name */ public void update(int id, String name) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 ContentValues values = new ContentValues(); values.put("name", name); int count = db.update("person", values, "_id = ?", new String[]{id + ""}); Log.i(TAG, "修改了: " + count + "行"); db.close(); // 数据库关闭 } } public ListqueryAll() { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象 if(db.isOpen()) { String[] columns = {"_id", "name", "age"}; // 需要的列 String selection = null; // 选择条件, 给null查询所有 String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值 String groupBy = null; // 分组语句 group by name String having = null; // 过滤语句 String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy); int id; String name; int age; if(cursor != null && cursor.getCount() > 0) { List personList = new ArrayList (); 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; } /** * 根据id查询人 * @param id * @return */ public Person queryItem(int id) { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象 if(db.isOpen()) { String[] columns = {"_id", "name", "age"}; // 需要的列 String selection = "_id = ?"; // 选择条件, 给null查询所有 String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值 String groupBy = null; // 分组语句 group by name String having = null; // 过滤语句 String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy); if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行 int _id = cursor.getInt(0); String name = cursor.getString(1); int age = cursor.getInt(2); db.close(); return new Person(_id, name, age); } db.close(); } return null; }