Android总结--SQLite

一.创建数据库

1.SQLiteOpenHelper是一个抽象类,我们要创建自己的类去继承他。SQLiteOpenHelper有两个抽象方法,分别是onCreate(),onUpgrade() ,我们需要在自己的帮助类里重写这两个方法,然后分别在这两个方法中去创建,升级数据库的逻辑

2.SQLiteOpenHelper还有两个非常重要的实例方法,getReadableDatabase(),getWritableDatabase() ,这两个方法都可以打开一个现有的数据库(如果数据库已经存在,则直接打开,否则创建一个新的数据库),并返回一个可以对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()返回的对象以只读方式打开数据库,getWritableDatabase()则抛出异常。

3.SQLiteOpenHelper有两个构造方法可以重写,一般使用参数少的哪一个。这个构造方法中接受四个参数
参数一:Context
参数二:数据库名,创建数据库使用的就是这里指定的名称
参数三:返回的Cursor,一般传null (暂时没碰到过使用场景)
参数四:当前数据库版本号,可用于对数据库进行升级操作
4.上诉关系:
当使用构造方法构造出实例对象之后,在调用它的getReadableDatabase()或getWritableDatabase()方法就可以创建数据库,此时重写的onCreate()方法也会被调用。

5.增删改查
调用getReadableDatabase()或getWritableDatabase()方法会返回一个SQLiteDatabase对象,db,我们使用这个对象就可以对数据库进行CRUD操作。(Create,Retrieve,Update,Delete)
5.1添加数据

  **db.insert()**
  参数一:表名
  参数二:一般传null
  参数三:ContentValues对象,put方法添加数据,然后传入、

5.2更新数据

  **db.update()**
  参数一:表名
  参数二:ContentValues
  参数三,四:用于约束更新某一行或者是某几行,默认所有行

5.3删除数据

  **db.delete()**
  参数一:表名
  参数二,三:用于约束删除某一行或者是某几行,默认所有行

5.3查询数据

  **db.query()**

  参数一:表名
  参数二:指定查询那几列,默认所有列
 参数三,四:约束查询某一行或某几行的数据,
 参数五:指定group by的序列
 参数六:对group by的序列进行进一步的过滤,不指定就不过滤
 参数七:指定查询结果的排序方式,不指定就默认排序

5.实例
帮助类的创建,一般在onCreate()方法中创建表

/** * Created by lenovo on 2016/6/18. */
public class blackNumberOpenHelper extends SQLiteOpenHelper {
    public blackNumberOpenHelper(Context context) {
        super(context, "blackNumber.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建数据库中的表
        db.execSQL("create table blackNumber " +
                "(_id integer primary key autoincrement , " +
                "phone varchar(20) , " +
                "mode varchar(5));");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

在项目中,对于数据库的增删改查方法一般都封装在dao包中,下面是我自己做的项目中封装的方法;

/** * Created by zfy on 2016/6/18. */
public class blackNumberDao {
    private final blackNumberOpenHelper blackNumberOpenHelper;
    //blackNumberDao 单利模式


    private blackNumberDao(Context context) {
        //1.私有化构造方法
        //创建数据库以及表结构
        blackNumberOpenHelper = new blackNumberOpenHelper(context);
    }

    //2.申明当前类对象
    private static blackNumberDao blackNumberDao = null;

    //3.提供方法供,如果当前类对象为空,则创建
    public static blackNumberDao getInstance(Context context) {
        if (blackNumberDao == null) {
            blackNumberDao = new blackNumberDao(context);
        }
        return blackNumberDao;
    }


    /** * 往表中插入数据 * * @return void * @author zfy * @parameter phone 拦截的电话号码 mode对应的拦截类型(1:代表拦截短信 2代表电话 3代表短信加电话) * @created at 2016/6/18 10:01 */
    public void insert(String phone, String mode) {
        SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("phone", phone);
        values.put("mode", mode);
        db.insert("blackNumber", null, values);
        //一定记得关掉!!!!
        db.close();
    }

    /** * 往表中删除数据 * * @return void * @author zfy * @parameter phone 删除号码 * @created at 2016/6/18 10:20 */
    public void delete(String phone) {
        SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();
        db.delete("blackNumber", "phone=?", new String[]{phone});
        db.close();

    }

    /** * 根据电话号码,更新拦截模式 * * @return void * @author zfy * @parameter phone 要更改模式的电话号码 mode 要更改为的模式!(1:代表拦截短信 2代表电话 3代表短信加电话) * @created at 2016/6/18 10:24 */
    public void update(String phone, String mode) {
        SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("mode", mode);
        db.update("blackNumber", values, "phone=?", new String[]{phone});
        db.close();

    }

    /** * 查询所有拦截的电话以及模式 * * @author zfy * @returns 查询到数据库中所有号码和类型 的集合 * @params 123 * @created at 2016/6/18 10:30 */
    public List<blackNumberInfo> findAll() {
        SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();
        Cursor cursor = db.query("blackNumber", new String[]{"phone", "mode"}, null, null, null, null, "_id desc");

        List<blackNumberInfo> blackNumberList = new ArrayList<blackNumberInfo>();
        while (cursor.moveToNext()) {
            blackNumberInfo blackNumberInfo = new blackNumberInfo();
            blackNumberInfo.setPhone(cursor.getString(0));
            blackNumberInfo.setMode(cursor.getString(1));
            blackNumberList.add(blackNumberInfo);
        }
        cursor.close();
        db.close();

        return blackNumberList;
    }

    /** * 每次查询20条数据 * * @author zfy * @returns 查询到数据库中所有号码和类型 的集合 * @parameter index 索引值,启示查询的位置 * @created at 2016/6/18 16:02 */
    public List<blackNumberInfo> find(int index) {
        SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();

        Cursor cursor = db.rawQuery("select phone,mode from blackNumber order by _id desc limit ?,20;", new String[]{index + ""});

        List<blackNumberInfo> blackNumberList = new ArrayList<blackNumberInfo>();
        while (cursor.moveToNext()) {
            blackNumberInfo blackNumberInfo = new blackNumberInfo();
            blackNumberInfo.setPhone(cursor.getString(0));
            blackNumberInfo.setMode(cursor.getString(1));
            blackNumberList.add(blackNumberInfo);
        }
        cursor.close();
        db.close();
        return blackNumberList;

    }

    /** *拿到数据库对应表中的总条目数 *@author zfy *@return count总条目数 *@parameter *@created at 2016/6/18 17:30 */
    public int getCount() {
        int count = 0;
        SQLiteDatabase db = blackNumberOpenH
etWritableDatabase();

        Cursor cursor = db.rawQuery("select count(*) from blackNumber;", null);

        if (cursor.moveT````````
Next()) {
            count = cursor.getInt(0);
        }


        cursor.close();
        db.close();
        return count;

    }

}

对数据库的操作在项目中经常会用,此处就是列出我项目中用到的地方,以后再忘记相关知识点的时候,可以快速回忆起来

你可能感兴趣的:(Android总结--SQLite)