SQLite数据库操作

2019-10-14  本文已影响0人  Ray206

用法

allprojects {
   repositories {
       jcenter()
       maven { url 'https://jitpack.io' }
   }
}

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.github.ray-tianfeng:FileDownload:v1.0.4'
}
   DataBaseConfig dataBaseConfig = new DataBaseConfig.Builder()
                       .dataBaseName("test.db")//数据库名称
                       .version(2)//数据库版本
                       .registerTable(TableEntity.class)//注册表,可以添加多个以“,”隔开
                       .upgradeGradients(new V2())//数据库梯度升级,可以添加多个升级计划以“,”隔开
                       .build();
   SQLiteDatabaseHolder.getInstance().init(Context mContext, DataBaseConfig dataBaseConfig);

说明:

参数 是否必须 说明
dataBaseName Y 数据库名称
dataBaseVersion Y 数据库版本
tables N 数据库表映射类注册,这里的表必须继承IEntity,而且需要一个空的构造方法,可以在初始化方法里面注册,也可以使用的时候再注册
gradients N 数据库版本
@Entity(tableName = "test_table")
public class TestTable extends IEntity {//必须实现IEntity
   @PrimaryKey(name = "primary_id")
   private int id;

   @ColumnInfo(name = "test_string", isNull = false)
   private String testString;

   @ColumnInfo(name = "test_boolean")
   private boolean testBoolean;

   @ColumnInfo(name = "test_float")
   private float testFloat;

   @ColumnInfo(name = "test_double")
   private double testDouble;

   public TestTable() {//必须有一个空实现
   }

   public int getId() {
       return id;
   }

   public String getTestString() {
       return testString;
   }

   public void setTestString(String testString) {
       this.testString = testString;
   }

   public boolean isTestBoolean() {
       return testBoolean;
   }

   public void setTestBoolean(boolean testBoolean) {
       this.testBoolean = testBoolean;
   }

   public float getTestFloat() {
       return testFloat;
   }

   public void setTestFloat(float testFloat) {
       this.testFloat = testFloat;
   }

   public double getTestDouble() {
       return testDouble;
   }

   public void setTestDouble(double testDouble) {
       this.testDouble = testDouble;
   }
}
   SQLiteDatabaseHolder.getInstance().registerTable(TableEntity);

说明:注册映射表

    SQLiteDatabaseHolder.getInstance().insert(TableEntity);

说明:TableEntity为IEntity的子类

  QLiteDatabaseHolder.getInstance().deleteByPrimaryId(id, TableEntity.class);

说明:
id为主键id
TableEntity为IEntity的子类的class

SQLiteDatabaseHolder.getInstance().updateByPrimaryId(TableEntity);
SQLiteDatabaseHolder.getInstance().queryAllByClassType(TableEntity.class);
  1. 实现DataBaseHolder<T> T类型为映射表实体类
  2. 编写操作代码
  3. 使用SQLiteDatabaseHolder装饰自定义操作类

demo示例:

public class TestTableHolder extends DataBaseHolder<TestTable> {

    //删除主键id大于10的数据
    public void delete(){
        getDateBase().delete(getTableStorage().getTableName(), getTableStorage().getPrimaryName() + " > 10", null);
    }
}

TestTableHolder testTableHolder = new TestTableHolder();
SQLiteDatabaseHolder.getInstance().decorateHolder(testTableHolder);
testTableHolder.delete();
  1. 实现DataBaseUpgradeHolder.AbstractSQLiteDefaultUpgrade或者ISQLiteUpgrade(AbstractSQLiteDefaultUpgrade实现了默认升级逻辑,备份数据,然后删除所有表,最后在创建表还原数据)
  2. 实现isApplyUpgrade,这个方法判断当先这个升级计划可以升级区间,例如:线上版本为2,升级版本为3,方法实现为1 < currentVersion && currentVersion < 3
  3. 实现getUpgradedVersion 返回升级后数据库版本号
  4. 实现upgrade,升级数库版本,该方法有两个参数,SQLiteDatabase数据库操作对象,tableStorageMap映射表

demo示例:

/**
 * version 1->2升级处理
 * Time: 2019/10/10 0010
 * Author: zoulong
 */
public class V2 extends DataBaseUpgradeHolder.AbstractSQLiteDefaultUpgrade {
    @Override
    public boolean isApplyUpgrade(int currentVersion) {
        //当先版本是否可以升级
        return 0 < currentVersion && currentVersion < 2;
    }

    @Override
    public boolean upgrade(SQLiteDatabase sqLiteDatabase, HashMap<Class, TableStorage> tableStorageMap) {
//        return super.upgrade(sqLiteDatabase, tableStorageMap);//默认实现方法1.备份数据数据;2.删除所有表;3.创建新表;4.还原备份数据
        TableStorage tableStorage = tableStorageMap.get(UpgradeTable.class);
        String execSql = tableStorage.getCreateTableSql();
        LogUtils.i("execSql:"+execSql);
        //添加一张表
        sqLiteDatabase.execSQL(execSql);
        return true;
    }

    @Override
    public int getUpgradedVersion() {
        //当次升级后数据库版本
        return 2;
    }
}

总结:
本库只支持非关系型数据库,支持的数据类型仅限基础数据类型,使用适用于记录大量非关系型数据,例如数据采集、账号密码。

源码地址

上一篇下一篇

猜你喜欢

热点阅读