android SQLite

1.SQLiteOpenHelper类

管理数据库的工具类,用于创建和管理数据库,更新数据库
构造类:参数1:上下文;参数2:数据库名称;参数3:游标工程;参数4:版本号,大于1
abstract 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 List<Person> queryAll() {
        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<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;
    }
    
    /**
     * 根据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;
    }

 

posted @ 2014-11-24 17:21  Eudora_Do  阅读(140)  评论(0编辑  收藏  举报