SQLite数据库的使用

SQLite数据库的使用

app通常需要保存一些有用的数据在本地,如果数据量小,比如app的一些配置信息,可以考虑使用轻量级的SharedPreferences来保存。如果数据量大,且要进行复杂的操作,则可能需要使用数据库来保存数据,而SQLite是Android系统默认支持的一款数据库。

业务描述:这篇文章里我们试图来完成这样一个业务,app支持多账号切换,且每个账号都会产生一些训练(比如跳绳)数据,当app没有联网时,把训练数据暂时保存到本地,当连上网络时,就上传训练数据然后清空本地训练数据,这样即使没有网络,也不至于造成训练数据的丢失,且可保证app正常使用。这个业务使用SharedPreferences来保存数据显然不太合适,因为每个账号都会产生数据,且数据量可能比较大,而且要把账号资料和训练数据对应起来,使用关系型数据库最合适不过了。
业务分析:根据以上业务,可以知道这个数据库里至少需要两个表,一个是用户表,一个是训练表。
表结构设计:
- 用户表:用户id,用户昵称、性别 等等
- 训练表: 用户id, 训练时间,训练个数 等等

根据以上分析,就可以着手建立数据库了。

1. 基础使用

1.1 SQLiteOpenHelper

SQLiteOpenHelper是一个用来创建数据库,及对数据库进行版本管理的类。
我们首先要做的就是自定义一个类来继承它,然后实现它的构造方法,数据库创建方法,及版本升级方法。如下:

public class MyDataBaseHelper extends SQLiteOpenHelper {
   
    private static final String TAG = "MyDataBaseHelper";

    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "mydb.db";


    public MyDataBaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        Log.e(TAG, "onCreate SQLite");
        sqLiteDatabase.execSQL(UserTable.SQL_CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        Log.e(TAG, "onUpgrade SQLite -->> oldVersion = " + oldVersion + " ; newVersion = " + newVersion);
    }

}

这里我们定义了一个MyDataBaseHelper 类来继承SQLiteOpenHelper类,并在这个类里定义了数据库的名称 DB_NAME ,定义了数据库版本号 DB_VERSION ,实现了构造方法,并重写了数据库的创建方法 onCreate 和版本升级方法 onUpgrade。数据表生成语句就在在 onCreate 方法里执行。这里只生成了一个用户表,训练表等后面版本升级的时候再添加,以模拟版本升级时添加数据表的操作。

1.2 定义数据及数据表

我们把数据表的定义全放在同一个类里,以方便管理。如下:

public final class TablesContract {
   

    private TablesContract(){
        //防止被初始化
    }

    public static class UserTable implements BaseColumns{
   
        //user表名 字段名 及 建表语句
        public static final String TABLE_NAME = "table_user";
        public static final String COLUMN_ID = "user_id";
        public static final String COLUMN_NAME = "user_name";
        public static final String COLUMN_GENDER = "user_gender";
        public static final String COLUMN_AGE = "user_age";
        public static final String SQL_CREATE_TABLE = "create table if not exists " + TABLE_NAME + " ( "
                + COLUMN_ID + " text not null,"
                + COLUMN_NAME + " text not null,"
                + COLUMN_GENDER + " integer,"
                + COLUMN_AGE + " integer)";
    }
}

自定义了一个 TablesContract 类,在里面定义了 用户资料表的 表名字段名SQL建表语句,目前用户表的字段有:用户id、用户名、性别、年龄 。如果数据库还需要添加其它表,也可以同样的方式定义在这个类里。
同时,对应用户表的字段定义一个用户对象类,如下:

public class UserBean {
    private String id;
    private String name;
    private int gender;
    private int age;

    public UserBean(String id, String name, int gender, int age) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    ... ...

    @Override
    public String toString() {
        return "UserBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", gender=" + gender +
                ", age=" + age +
                '}';
    }
}

示例代码省略了一些get、set方法,就不全部放上来了。

1.3 定义一个数据库操作类

定义这个类,主要是为了把数据库与上层应用分离开,使用的时候不必考虑数据库操作详情,只需要调用相应的方法就可以存取、删改数据。
如下:

public class MyDatabaseOperator {
   
    private static SQLiteOpenHelper openHelper;

    public 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值