Android电话短信拦截项目总结之 项目中sqlite运用

来源:互联网 发布:240控台编程视频 编辑:程序博客网 时间:2024/04/30 05:37

/**
 * 数据库帮助类
 * 创建数据库
 * 创建表
 * 插入原始数据
 * 数据库助手类能创建SQLiteDatabase对象
 */

public class DbOpenhelp extends SQLiteOpenHelper {
    public static final String TABLENAME = "black_info";


    public DbOpenhelp(Context context) {
        super(context, "zhh.db", null, 1);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建表
        String black_info = "create table black_info (_id  INTEGER PRIMARY KEY AUTOINCREMENT,number VARCHAR,name VARCHAR,type INTEGER )";
        db.execSQL(black_info);
        //插入一些原始数据
        db.execSQL("insert into black_info (number, name, type) values ('110', 'FJ0', 0)");
        db.execSQL("insert into black_info (number, name, type) values ('111', 'FJ1', 1)");
        db.execSQL("insert into black_info (number, name, type) values ('112', 'FJ2', 2)");
        db.execSQL("insert into black_info (number, name, type) values ('119', 'FJ9', 0)");


    }


    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
    }


}


//对数据库进行怎删改查的操作

public class BlackInfoDao {


    DbOpenhelp dbOpenhelp = null;


    public BlackInfoDao(Context context) {
        dbOpenhelp = new DbOpenhelp(context);


    }


    /**
     * 1. 添加一个黑名单
     */
    public void add(BlackInfo blackinfo) {
        //得到SQLiteDatabase的对象
        SQLiteDatabase db = dbOpenhelp.getWritableDatabase();
        //分装数据contentValues中的数据就是用map存放的
        ContentValues contentValues = new ContentValues();
        //key写的就是表的字段名
        contentValues.put("number", blackinfo.getNumber());


        contentValues.put("name", blackinfo.getName());


        contentValues.put("type", blackinfo.getType());
        //执行插入数据,返回id号
        long id = db.insert(DbOpenhelp.TABLENAME, null, contentValues);
        Log.i("1", "擦如数据的id" + id);
        //关闭数据库
        db.close();


    }


    /**
     *2删除多个黑名单 
     *
     */
    public void deleteBlackNumbers(List<Integer> ids) {
        SQLiteDatabase database = dbOpenhelp.getWritableDatabase();
        for (Integer id : ids) {
            database.delete(DbOpenhelp.TABLENAME, "_id=" + id, null);
        }
        database.close();
    }


    /**
     * 3. 删除一个黑名单
     */
    public void delete(int id) {
        // 得到SQLiteDatabase对象
        SQLiteDatabase database = dbOpenhelp.getWritableDatabase();


        // 执行delete
        int deleteCount = database.delete(DbOpenhelp.TABLENAME, "_id=?", new String[] { id + "" });
        Log.i("TAG", "delete deleteCount=" + deleteCount);


        // 关闭连接
        database.close();
    }


    /**
     * 4.更新一个黑名单
     */
    public void upData(BlackInfo blackinfo) {
        //得到SQLiteDatabase的对象
        SQLiteDatabase db = dbOpenhelp.getWritableDatabase();
        //分装数据contentValues中的数据就是用map存放的
        ContentValues values = new ContentValues();
        values.put("number", blackinfo.getNumber());


        values.put("name", blackinfo.getName());


        values.put("type", blackinfo.getType());
        //执行插入数据,返回id号
        long num = db.update(DbOpenhelp.TABLENAME, values, "id=?", new String[] { blackinfo.getId()
                                                                                  + "" });
        Log.i("1", "更新的行数" + num);
        //关闭数据库
        db.close();


    }


    /**
     * 5. 查询所有黑名单列表
     */
    public List<BlackInfo> getAll() {
        List<BlackInfo> list = new ArrayList<BlackInfo>();


        //得到SQLiteDatabase的对象
        SQLiteDatabase db = dbOpenhelp.getWritableDatabase();
        //String sql = "select _id, number,name,type from black_info";
        //到序之后,新加入的数据将会放到第一条
        String sql = "select _id,number,name,type from black_info" + " order by _id desc";
        //执行插入数据,返回id号
        Cursor cursor = db.rawQuery(sql, null);


        while (cursor.moveToNext()) {
            int id = cursor.getInt(0);
            String number = cursor.getString(1);
            String name = cursor.getString(2);
            int type = cursor.getInt(3);


            BlackInfo blackInfo = new BlackInfo(id, number, name, type);
            list.add(blackInfo);
        }
        cursor.close();
        //关闭数据库
        db.close();


        return list;


    }


    /**
     * 6. 根据黑名单号或名称模糊查询匹配
     *      的黑名单列表
     */
    public List<BlackInfo> getBlacks(String key) {
        List<BlackInfo> list = new ArrayList<BlackInfo>();


        //得到SQLiteDatabase的对象
        SQLiteDatabase db = dbOpenhelp.getWritableDatabase();
        String sql = "select _id,number,name,type from black_info where number like ? or name like ?";
        //模糊查询
        String[] args = new String[] { "%" + key + "%", "%" + key + "%" };


        //执行插入数据,返回id号
        Cursor cursor = db.rawQuery(sql, args);


        while (cursor.moveToNext()) {
            int id = cursor.getInt(0);
            String number = cursor.getString(1);
            String name = cursor.getString(2);
            int type = cursor.getInt(3);


            BlackInfo blackInfo = new BlackInfo(id, number, name, type);
            list.add(blackInfo);
        }
        cursor.close();
        //关闭数据库
        db.close();


        return list;


    }


    /**
     * 短信号
     * 判断是否是一个黑名单的短信号
     * //type 0:  电话+短信 1: 电话 2:短信
     */
    public boolean isSmsBlack(String number) {
        boolean isBlack = false;
        SQLiteDatabase database = dbOpenhelp.getWritableDatabase();
        String sql = "select count(*) from " + DbOpenhelp.TABLENAME + " where number=?"
                     + " and type in (0, 2)";
        Cursor cursor = database.rawQuery(sql, new String[] { number });
        if (cursor.moveToNext()) {
            int count = cursor.getInt(0);
            isBlack = count > 0; //如果>0就是黑名单号
        }
        database.close();
        return isBlack;
    }


    /**
     * 电话号
     * 判断是否是一个黑名单的电话号
     * //type 0:  电话+短信 1: 电话 2:短信
     */
    public boolean isCallBlack(String number) {


        boolean isBlack = false;
        SQLiteDatabase database = dbOpenhelp.getWritableDatabase();
        String sql = "select count(*) from " + DbOpenhelp.TABLENAME + " where number=?"
                     + " and type in (0, 1)";
        Cursor cursor = database.rawQuery(sql, new String[] { number });
        if (cursor.moveToNext()) {
            int count = cursor.getInt(0);
            isBlack = count > 0; //如果>0就是黑名单号
        }
        database.close();
        return isBlack;
    }
}



0 0