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