Android数据存储之SQLite
SQLite是一个轻量级嵌入式数据库引擎,支持SQL语言。
一、特点:
1、可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite将检查它的数据类型。如果该类型和关联的列不匹配,那么SQLite会尝试将该值转换成该列的数据类型,如果不能转换,那么该值将作为其本身具有的数据类型存储
2、内置丰富API(SQLiteDatabase、SQLiteOpenHelper,Cursor等)
3、存储位置:存储路径在**/data/data//databases/**下
二、接下来结合代码讲述数据库和API的使用:
1、创建DatabaseBaseHelper类来继承SQLiteOpenHelper
public class DatabaseBaseHelper extends SQLiteOpenHelper {
2、实现带有四个参数的构造函数(创建数据库)
public DatabaseBaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
构造函数:里面有四个参数:Context(上下文环境,比如说Activity)、name(数据库的名字,调用时传入)、factory(一个可选的有表工厂,通常是null)、version(当前正在使用的数据库模型版本号)。
其中,name参数表示数据库文件名,SQLiteOpenHelper会根据这个文件名首先进行检测是否存在该数据库,如果不存在,那么就会以这个名字创建一个数据库文件。如果存在这个数据库则会打开数据库。version表示数据库的版本号,如果当前传入的数据库版本号比上次创建或升级的版本号高,那么SQLiteOpenHelper就会调用onUpdate()方法
3、在DatabaseBaseHelper的onCreate方法中创建表
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(id int,name varchar(20))";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 1 && newVersion == 2) {
String sql = "alter table user add age varchar(20)";
db.execSQL(sql);
}
}
onCreate()方法:传入了一个SQLiteDataBase对象(即当前已经创建或打开的数据库对象)作为参数,对这个对象填充表和初始化数据。
onUpdate()方法:传入了三个参数,一个是SQLiteDataBase的对象,一个数据库旧版本号,一个新版本数据库版本号。实现把一个旧的数据库转变成新的数据库。
如例子中:创建一个user表有两个字段,id和name,当数据库版本从1更新为2时,增加一个字段age;
4、操作数据库的类UtilSqLite(可以是一个任意命名的java类)
DatabaseBaseHelper dbHelper;//数据库帮助类
SQLiteDatabase sqlDb;//数据库
public UtilSqLite() {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitysqlite);
ButterKnife.bind(this);
dbHelper = new DatabaseBaseHelper(this, "test_db", null, 1);
sqlDb = dbHelper.getWritableDatabase();
}
在构造方法中创建一个名为test_db的数据库,版本号为1,通过dbHelper获取到SQLiteDatabase数据库对象
三、在UtilSqLite中通过数据库对象进行增删改查的操作:
增:
Log.i(":", "插入数据");
if (sqlDb != null) {
String sql = "insert into user values(?,?)";
sqlDb.execSQL(sql, new Object[]{1, "ytf"});
}
删:
Log.i(":", "删除数据");
if (sqlDb != null) {
String sql = "delete from user where id=?";
sqlDb.execSQL(sql, new Object[]{1});
}
改:
Log.i(":", "修改数据");
if (sqlDb != null) {
String sql = "update user set name = ? where id = ?";
sqlDb.execSQL(sql, new Object[]{"呵呵", 1});
}
查:
Log.i(":", "查询数据");
if (sqlDb != null) {
String sql = "select * from user where id = ?";
Cursor cursor = sqlDb.rawQuery(sql, new String[]{"1"});
while (cursor.moveToNext()) {
Log.i("Id:", cursor.getString(0));
Log.i("Name:", cursor.getString(1));
}
cursor.close();
}
AndroidStudio查看数据库
AndroidStudio->View->Tool Windows->Device File Explorer可查看到数据信息