SQLite用法总结

准备工作:
自己建立一个类继承SQLiteOpenHelper类,这样就相当于你不费吹灰之力就继承了父类的一些属性和方法。

public class DBHelper extends SQLiteOpenHelper{

然后在你自己创建的类DBHelper中要重写这两个方法:
在这里插入图片描述
第一个方法可以在里面写一些创建表的操作(我记得onCreate方法好像必须主动调用,就算第一次初始化DBHelper也不会执行,要是想知道的话最好打印Log看下),第二个方法是在数据库升级后的回调,我其实这两个方法都没有使用。

构造方法: 必须有四参那个

然后这个类里你可以封装一些对表的操作,增删改查然后传等等,然后通过在别的类里对DBHelper实例化使用其对象调用这些方法,但是由于我需要操作感觉太多重复,没复用多少。

关于运行哪个线程:可以在多线程中,并且同步问题SQLiteDatabase帮你实现了!!

它的同步策略
1.引用计数和ThreadLocal完成的
2.每个线程持有一个数据库连接(不一定创建,有数据库连接池的优化)
3.数据库会给主线程持有的连接提高优先级。
(具体了解还需要自行分析,这个我只是简单了解了一下需不需要同步)

下来看具体操作吧:
首先不管做什么操作之前都需要一个SQLiteDatabase对象,它可以通过DBHelper获取:

//this是DBHelper对象
//获取相关操作需要的读/写类型的 SQLiteDatabase 对象
 SQLiteDatabase database = this.getWritableDatabase(); //写
 SQLiteDatabase database = this.getReadableDatabase(); //读

创建表:
方式一:

//通过sql语句
 SQLiteDatabase db = dbHelper.getWritableDatabase(); //写
 // 语句格式:"create table 表名(字段名 类型,字段名 类型,...)"  
 // 注意','后没空格
 String sql = "create table search(title varchar(40))";
 db.execSQL(sql);

应该还有别的方式,不过用的好像不多,我也没用过,所以就不写了

删除表:

public void deleteTable(String tableName){
        SQLiteDatabase database;
        database = this.getWritableDatabase(); //写
         //先判断存在再删
        if(IsTableExist(tableName,database)){
         //sql语句格式:"drop table "+tableName
            String sql = "drop table "+tableName;
            database.execSQL(sql);
        }
    }

判断表是否存在

  @SuppressLint("Recycle")
    public boolean IsTableExist(String tabName, SQLiteDatabase db) {
        boolean result = false;
        if (tabName == null) {
            return false;
        }
        Cursor cursor = null;
        //sql语句格式:如下一致
        String sql = "select count(*) as c from sqlite_master where type ='table' and name ='"
                + tabName.trim() + "' ";
        cursor = db.rawQuery(sql, null);
        //判断是否有下一个
        if (cursor.moveToNext()) {
            int count = cursor.getInt(0);
            if (count > 0) {
                result = true;
            }
        }
        return result;
    }

清空表

 public void deleteTable(SQLiteDatabase db){
        db.execSQL("delete from tableName");
  }

添加一条数据:
方式一:

 // sql语句:"insert into search (title) values(?)"
 //          "insert into 表名 (字段名) values(?)"
 // 第二个参数:字段集合
    public void addOneDate(String sql,Object[] params){
        SQLiteDatabase database;
        database = this.getWritableDatabase();
        database.execSQL(sql,params);
    }

方式二:

  public void addOneHistoryRecord(){
  		//获取搜索框文字
        String text = searchEditTextView.getText().toString();
        //主要靠这个contentValues对象存储.<key,value>形式
        ContentValues contentValues = new ContentValues();
        contentValues.put("title", text);
        contentValues.put("tag",tableName);
        //写
        dbHelper.getWritableDatabase()
                .insert("history",null,contentValues);
        //后面这些逻辑和添加数据无关        
        historyList.add(new DBDataBean(text,tableName));
        updateHistory();
        historyRecAdapter.notifyDataSetChanged();
    }

删除和某条件相关所有数据:

方式一:

//第一参数:表名
//第二参数:根据哪个字段名来删除数据 如:"title"←这是一个字段名
//第三参数:上面那个字段名对应具体数据集合如:{"我要删除这句话"}
//然后就会删除title="我要删除这句话"的所有数据
 public void deleteDate(String tableName,String columnName,Object[] params){
        SQLiteDatabase database;
        String sql = "delete from "+tableName+" where "+columnName+"=?";
        database = this.getWritableDatabase();
        database.execSQL(sql,params);
    }

方式二:

public void delete(String name) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        //参数列表:表名,条件,具体数据列表
         db.delete("person", "name=?", new String[]{name});
    }

查询和某条件相关所有数据:
查询有很多方式,尤其是模糊查询,有很多方式。

public void queryHistoryTable(String tableName ,String[] columnNames,String keyName,String key){
        SQLiteDatabase database;
        database = this.getReadableDatabase(); //读
        Cursor cursor = database.query(tableName
                ,columnNames
                //这是一个模糊查询,包含key字符串用这个" LIKE"+" '%"+key+"%'" 
                //注意空格!!
                ,keyName+" LIKE"+" '%"+key+"%'" 
                ,null //
                ,null //
                ,null //
                ,null); //
            historyList.clear();
            //下面操作是从cursor中取数据
            //cursor.getString(0)取出同一条数据的第一字段值
            //cursor.getString(1)取出同一条数据的第二字段值
            //注意:上面字段必须是第二个参数String[] columnNames中有的字段
            //cursor.moveToNext()移向下一条数据
            for(int i =0 ; i< 20&& cursor.moveToNext(); i++){
                historyList.add(new DBDataBean(cursor.getString(0),cursor.getString(1)));
                Log.e("query_his",""+cursor.getString(0));
            }
    }

更新某条件相关的数据

public void updateDate(String tableName,String columnName,Object[] params){
        SQLiteDatabase database;
        String sql = "update "+tableName+" set "+columnName+"=? where "+columnName+"=?";
        database = this.getWritableDatabase(); //写
        database.execSQL(sql);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值