美文网首页
SQLite数据库操作

SQLite数据库操作

作者: Ray206 | 来源:发表于2019-10-14 09:59 被阅读0次
  • 数据库的映射关系式通过注解来说明

  • 动态创建表

  • 梯度式版本更新

  • 自定义操作

    这是一个通过注解来说明映射关系的数据库操作库,以对象的方式操作数据库,本库还提供数据库梯度升级方案。现已封装成依赖包,也可以直接git源代码修改。

用法

  • LIB配置
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 数据库版本
  • 创建表映射
    1. 注解介绍
      Entity:注解表,并设置表名称,示例:@Entity(tableName = "test_table")
      PrimaryKey:注解主键,并设置主键列名称,示例:@PrimaryKey(name = "primary_id")
      ColumnInfo:注解列名称并设置名称,示例: @ColumnInfo(name = "test_float")
    2. demo示例:
@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的子类

  • 根据主键id删除数据
  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;
    }
}

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

源码地址

相关文章

  • Sqlite 使用笔记

    1. 数据库基本操作封装 sqlite 数据操作 语句类型 sqlite 数据库的简单实用- 导入sqlite3数...

  • android笔记6

    本章学习目标: 了解SQLite数据库的特点和体系结构 掌握SQLite数据库的建立和操作方法 SQlite介绍 ...

  • 【2020-06-16】Python操作sqlite 报错:sq

    python操作sqlite数据库时出现报错信息: sqlite3.OperationalError: datab...

  • Android - base - SQLite

    Android 自带的SQLite数据库 大纲 SqLite 数据类型 核心类 创建和升级数据库 CRUD操作 #...

  • greenDAO框架介绍

    一:GreenDAO介绍 它是一个为了帮助Android开发者操作SqLite数据库的开源项目。SQLite数据库...

  • go sqlite3 打包 gcc 问题

    使用 _ "github.com/mattn/go-sqlite3" 操作sqlite数据库,打包的时候报错,关于...

  • SQLite 基本操作

    SQLite的基本语法和MySQL的类似。 1.数据库操作 1.1 创建/打开数据库 直接使用sqlite3 Da...

  • Python进阶2 - 数据库编程: 使用SQLite进行数据库

    操作SQLite数据库 使用python操作数据库的流程: 通过connect()函数获取到数据库连接对象; 通过...

  • python访问数据库

    操作数据库:创建连接--创建游标--执行sql语句1、SQLite3数据库Python就内置了SQLite3,可以...

  • WCDB数据库存储

    一. sqlite数据库:1、是基于c语言开发的数据库2、用c语言对数据库执行操作访问3、sqlite是动态的数据...

网友评论

      本文标题:SQLite数据库操作

      本文链接:https://www.haomeiwen.com/subject/sqblmctx.html