Sqlite 封装 SQLiteOpenHelper 增、删、改、查,快速上手

1、首先新建一个类继承SQLiteOpenHelper 实现 oncreate 、onUpgrade 的方法 以及一个构造方法

并写一个创建数据的语句

public class DataBaseHelper extends SQLiteOpenHelper

private static final String CREATE_USER=" create table LoginUser ( _id integer primary key autoincrement, username text,password text )"

创建一个表名 LoginUser  id的属性为主键 并且 自增,username 为文本,password 为文本(当然最好还是不要)

private static final String CREATE_USER = "create table LoginUser(" +
        "_id integer primary key  autoincrement," +
        "username text," +
        "password text)";

实现一个构造方法 和  oncreate 、onUpgrade

public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
    this.context = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_USER);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("drop table if exists User");
    onCreate(db);
}



2、创建一个DbManager类

用单利模式(下面这个是双重锁)创建出一个数据名为UserStore

public class DbManager {

    public static DataBaseHelper mHelper;

    //构造方法
    private DbManager(){}
    //单利模式
    public  static SQLiteDatabase getInstance(Context context) {
        if (mHelper == null) {
            synchronized (DbManager.class) {
                if (mHelper == null) {
                    mHelper = new DataBaseHelper(context, "UserStore", null, 1);
                }
            }
        }
        return  mHelper.getWritableDatabase();
    }
}

3、创建一个接口类 IDao

下面这个类我是为了测试用的,所以没有写的比较规范,大家可以自行更改

public interface IDao {

    void insert(Context context, String username, String password);

    void delete(Context context, String username);

    void update(Context context, String fieldName, String username, String password);

    Cursor  query(Context context, String username);
}

4、创建一个UserDao类,用来实现具体的数据库查询方法


具体查询方法使用

4.1   insert 插入一条数据

源码中的insert方法。

public long insert(String table, String nullColumnHack, ContentValues values)

第一个参数: String table  表名

SQL doesn't allow inserting a completely empty row without   naming at least one column name.

第二个参数: String nullColunHack    源码中解释 到 SQL不允许插入完全空行而不命名至少一个列名。  那么我们就填上null

第三个参数:填入键值对 ,

public void insert(Context context, String username, String password) {
    SQLiteDatabase db;
    Log.e("-------------", "insert==" + context.toString() + "username====" + username + "password====" + password);
    db = DbManager.getInstance(context);
    ContentValues values = new ContentValues();
    values.put("username", username);
    values.put("password", password);
    db.insert("LoginUser", null, values);
}

对应的sqlite语句

INSERT INTO LoginUser VALUES (value1,value2,value3,...valueN);


4.2  delete  删除一条数据

看看源码的的delete方法

delete(String table, String whereClause, String[] whereArgs)

第一个参数不解释

第二个参数:删除条件 ,比如说 “username=?”

第三个参数:删除条件的值 。 ???这个问号的值   “admin” 有多少个问号就要有多少个值

@Override
public void delete(Context context, String username) {
    SQLiteDatabase db;
    db = DbManager.getInstance(context);
    db.delete("LoginUser", "username=?", new String[]{username});
}
对应的sqlite语句

sqlite> DELETE  FROM  LoginUser WHERE username ="aaa";

4.3 update 

看看源码的update方法

int update(String table, ContentValues values, String whereClause, String[] whereArgs)

第一个参数:不解释

第二个参数 跟插入数据的方法的values 一样,在更新的方法里头,意思就是 需要更新那些字段的数据)

第三个参数: 更新条件  条件1,条件2

第四个参数 :更新条件的值  值1,值2


看下例子对应的参数



这下应该明白了吧

4.4 query  查询语句

源码query 方法 参数

 Cursor query(String table, String[] columns, String selection,
        String[] selectionArgs, String groupBy, String having,
        String orderBy) 
/**
 * @table 表名
 * @colums 列名
 * @selection 搜索条件1,条件2
 * @selectionbArgs 条件1的值,条件2的值
 * @group null
 * @having null
 * @orderBy 排序
 * @limit 分页
 */
Cursor cursor = db.query("LoginUser", new String[]{"username", "password"},
        "username like ?", new String[]{"%a%"},
        null, null, null);
Log.e("aaa", cursor.getColumnCount() + " 数据库列数");
Log.e("aafffa", cursor.getCount() + "数据行数");
 select   username, password  from LoginUser where username like "%a%";


在Activity中调用 那就很简单啦

UserDao.getmUserDao().insert(this, user, pwd);
UserDao.getmUserDao().delete(this, user);





猜你喜欢

转载自blog.csdn.net/qq_36099573/article/details/80018812