这段时间对自己的工作生活状态都是不满意的。工作上因为我刚刚入职,上级是不会把核心的任务交给我,所以我除了写写界面,还有很多时候都不知道要干什么,在项目上的进步也很少。生活上总是一堆琐事,刚刚来到北京,算是刚刚安定下来吧,但是租房总是各种各样的问题,而且生活还是比较拮据,因为不想让父母再供应自己的生活费,除了经济上的压力,最重要的是平时给自己安排的学习任务总是不能按时执行,这让我很自责和厌烦自己。
吐完苦水,还是要继续努力呀,毕竟抱怨后悔都解决不了问题。扎扎实实的学好技术,心理才能踏实呀。
今天整理一下SQLite数据存储的相关知识,这个知识点我在大学做项目的时候用到要吐,但是现在再去看竟然有很多点都忘了,所以如此看来,真的是要及时温故知新呀,要不然真的会因为理解不深入而很快忘记。
一、SQLite简介
用文件和SharedPreferences进行数据存储是很有限制的,它们只适合保存一些简单的数据和键值对,如果数据量比较大而且数据关系比较复杂时,SQLite就是比较合适的选择了。SQLite是Android Studio内置的一款轻量级关系型数据库,它的运行速度非常快,占用的资源很少,所以特别适合在异动设备上使用。如果有过SQL Sever的使用经验,那么就更容易上手SQLite了。
SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)、BLOB(二进制对象)数据类型,实际上它也接受varchar、char、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五中数据类型。
二、创建数据库
Android提供了一个SQLiteOpenHelper帮助类,借助这个类可以非常简单的对数据库进行创建和升级。但它是个抽象类,如果我们想要使用它的话,就要定义一个自己的帮助类去继承他,然后重写它的抽象方法。主要有两个重要的方法:onCreate()和onUpdate()用于实现数据库的创建和升级。
public abstract void onCreate (SQLiteDatabase db):当数据库第一次被创建的时候去调用,在onCreate()方法里面可以生成数据库表结构和添加一些应用使用到的初始化数据,返回DataBase
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion):当数据库需要更新的时候调用,调用的时候需要先删除原来的表,或者去更新新的版本号
当然我们还会用到getReadableDatabase()和getWritableDatabase()这两个放来来获取数据实例。
getWritableDatabase()方法以读写的方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读不能写;
getReadableDatabase()方法以读写的方式打开数据库,如果数据库的磁盘空间满了,就会打开失败。
三、来个例子
1、需求:创建一个名为“Student.db”的数据库,存储每个学生的学号、姓名、性别、年龄、专业、手机号。在第一个界面显示添加数据、修改数据、查询数据、删除数据功能按钮,点击按钮进入相应功能界面,完成相应功能。其中为了方便起见,将修改数据于查询数据功能放置在一个活动界面中,用户先利用学号进行查询,然后可根据查询出的结果,对学生的某一项属性进行修改。
2、先看效果把
3、代码部分
数据库部分(自定义一个帮助类):
public class MyDatabaseHelper extends SQLiteOpenHelper {
//SQL语句创建表,并定义为一个字符串常量
public static final String CREATE_STUDENT = "create table Student("
+ "id text primary key,"
+ "name text,"
+ "sex text,"
+ "age text,"
+ "major text,"
+ "phone text)";
private Context mContext;
//重写SQLiteOpenHelper的构造方法
//这个构造方法接收四个参数,第一个参数是Context,上下文;
//第二个参数是数据库名,创建数据库时使用的就是这里指定的名称;
//第三个参数允许我们在查询数据时返回一个自定义的Cursor,一般传入null;
//第四个参数表示当前数据库的版本号,用于对数据库进行升级操作。
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
//创建数据库
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_STUDENT) ; //在创建SQLite数据库的同时执行建表语句
Toast.makeText(mContext, "数据库创建成功