上部分完整代码
public class BlackNamedb extends SQLiteOpenHelper{
public BlackNamedb(Context context) {
super(context, "blackname.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//执行SQL语句
sqLiteDatabase.execSQL("create table blackname" +
"(_id integer primary key autoincrement,phone varchar(20),mode integer);");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
}
}
1:写一个类继承 SQLiteOpenHelper
public class BlackNamedb extends SQLiteOpenHelper
2:重写构造方法
public BlackNamedb(Context context) {
//父类的构造方法四个参数含义(上下文,表名,是否需要游标,版本名)
super(context, "blackname.db", null, 1);
}
3:在Oncreate方法中执行创建表格的SQL语句
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//执行SQL语句
sqLiteDatabase.execSQL("create table blackname" +
"(_id integer primary key autoincrement,phone varchar(20),mode integer);");
}
4:数据库升级
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
//更新的时候版本名必须大于构造方法的版本名
}
下部分完整代码(包括了数据库的JDBC)
public class BlacknameJDBC {
private final BlackNamedb blackNamedb;
//1:私有化构造方法
private BlacknameJDBC(Context context) {
blackNamedb = new BlackNamedb(context);
}
//2:申明当前类的对象。必须是静态的
private static BlacknameJDBC blacknameJDBC = null;
//3:提供一个静态方法如果当前类的对象为空则要创建一个新的对象
public static BlacknameJDBC getInstance(Context context){
if (blacknameJDBC==null){
blacknameJDBC = new BlacknameJDBC(context);
return blacknameJDBC;
}else {
return blacknameJDBC;
}
}
/**
*
* @param phone 拦截的电话
* @param mode 拦截的类型 1是短信 2是电话 3是所有
*/
public void insert(String phone , String mode){
//开启数据库做写入操作
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//春悲ContentValues 封装
ContentValues values = new ContentValues();
values.put("phone",phone);
values.put("mode",mode);
//进行写入操作 方法接收参数(表的名称,没有给值时,给NULL,内容 ContentValues 用这个封装);
writableDatabase.insert("blackname",null,values);
blackNamedb.close();
}
/**
*
* @param phone 想要删除的电话号码
*/
public void delect(String phone){
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//进行删除操作(表的名称,要删除的字段名称,要删除的字段值,要使用String类型的数组)
writableDatabase.delete("blackname","phone=?",new String[]{phone});
writableDatabase.close();
}
/**
* 根据电话号码去更新拦截模式
* @param phone 要更新的电话
* @param mode 要更新为的模式(1:短信 2:电话 3:拦截所有(短信+电话)
*/
public void updata(String phone,String mode){
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//准备数据
ContentValues values = new ContentValues();
values.put("mode",mode);
// ava.lang.String table, android.content.ContentValues values, java.lang.String whereClause, java.lang.String[] whereArgs
//进行更新操作(表的名称,要更新的值,要更新的字段,要更新的字段值)
writableDatabase.update("blackname",values,"mode=?",new String[]{phone});
writableDatabase.close();
}
/**
* 返回的就是数据库中所有的号码以及类型
*/
public List<Blacknamebin> FindAll(){
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//查询(表名,查询的字段,查询的条件,查询的条件,查询的条件,查询的条件, 查询出来排序的方法 默认为正序,desc为倒叙)
//拿到游标
Cursor query = writableDatabase.query("blackname", new String[]{"phone", "mode"}, null, null, null, null, "_id desc");
//创建一个集合
List<Blacknamebin> blackname = new ArrayList<Blacknamebin>();
while (query.moveToNext()){
//生成一个BIN类放常用字段
Blacknamebin blacknamebin = new Blacknamebin();
blacknamebin.phone = query.getString(0);
blacknamebin.mode = query.getString(1);
System.out.println("blacknamebin.phone"+query.getString(0)+"````````````blacknamebin.mode"+query.getString(1));
blackname.add(blacknamebin);
}
query.close();
writableDatabase.close();
return blackname;
}
}
1:私有化构造方法
private BlacknameJDBC(Context context) {
blackNamedb = new BlackNamedb(context);
}
2:申明当前类的对象,必须是静态的,可以置为空值
private static BlacknameJDBC blacknameJDBC = null;
3:提供一个静态方法,作用:如果当前类的对象为空则要创建一个新的对象
public static BlacknameJDBC getInstance(Context context){
if (blacknameJDBC==null){
blacknameJDBC = new BlacknameJDBC(context);
return blacknameJDBC;
}else {
return blacknameJDBC;
}
}
上面是基础部分,接下来在这个类中提供增删改查的方法
1:添加数据,这个例子我加入两个字段
public void insert(String phone , String mode){
//开启数据库做写入操作
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//准备ContentValues 封装
ContentValues values = new ContentValues();
values.put("phone",phone);
values.put("mode",mode);
//进行写入操作 方法接收参数(表的名称,没有给值时,将null插入数据库,内容 ContentValues 用这个封装);
writableDatabase.insert("blackname",null,values);
blackNamedb.close();
}
2:删除数据
public void delect(String phone){
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//进行删除操作(表的名称,要删除的字段名称,要删除的字段值,要使用String类型的数组)
writableDatabase.delete("blackname","phone=?",new String[]{phone});
writableDatabase.close();
}
3:更新数据
/**
* 根据电话号码去更新拦截模式
* @param phone 要更新的电话
* @param mode 要更新为的模式(1:短信 2:电话 4:拦截所有(短信+电话)
*/
public void updata(String phone,String mode){
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//准备数据
ContentValues values = new ContentValues();
values.put("mode",mode);
// ava.lang.String table, android.content.ContentValues values, java.lang.String whereClause, java.lang.String[] whereArgs
//进行更新操作(表的名称,要更新的值,要更新的字段,依据什么字段更新)
writableDatabase.update("blackname",values,"mode=?",new String[]{phone});
writableDatabase.close();
}
5:查询数据(这里查询所有数据)
public List<Blacknamebin> FindAll(){
SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();
//查询(表名,查询的字段,查询的条件,查询的条件,查询的条件,查询的条件, 查询出来排序的方法 默认为正序,desc为倒叙)
//拿到游标
Cursor query = writableDatabase.query("blackname", new String[]{"phone", "mode"}, null, null, null, null, "_id desc");
//创建一个集合
List<Blacknamebin> blackname = new ArrayList<Blacknamebin>();
while (query.moveToNext()){
//生成一个BIN类放常用字段
Blacknamebin blacknamebin = new Blacknamebin();
blacknamebin.phone = query.getString(0);
blacknamebin.mode = query.getString(1);
blackname.add(blacknamebin);
}
query.close();
writableDatabase.close();
return blackname;
}
}
额外,将字段都放到bin类里
public class Blacknamebin {
public String phone;
public String mode;
}
如果是
私有的字段则要生成get set tostring 方法
public class Blacknamebin {
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
public String toString() {
return super.toString();
}
private String phone;
private String mode;
}