数据存储
Android 基础开发 数据存储
数据存储是什么
数据保存到App本身是本节课的内容
存储数据的方式 有哪些
- SP
- SQLite数据库
- Room数据库
数据存储的选择
- 配置信息 保存的sp(记住密码,看书到 69页)
- 列表数据 保存到数据库 Room 数据库简洁 SQLite 原生(联系人,短信)
SP 学习
SP特点
sharedpreference 首选项
- 存储软件的配置信息
- 自动登录 主题记录
- 不能存太多数据 很小很简单的选项可以存
- 当程序运行首选项里面的数据会全部加载,会卡顿
- android xml
- windows ini
SP简单使用
-
sp保存
-
// 参数1:Sp名字 // 参数2:Sp保存的模式: 追加(每次保存都会追加),常规(每次保存都会更新)key : value SharePreferences sp = getSharedPreference(“SPname”,Context.MODE_PRIVATE); sp.edit().putString("derrKey","九阳神功").apply();//apply 才会写道xml配置文件里面去
-
-
sp获取
-
SharePreferences sp = getSharedPreference(“SPname”,Context.MODE_PRIVATE); String value = sp.getString("derryKey","默认值");//假设derrykey获取是空的,去拿默认值的value Toast.makeText(this,""+value,Toast.LENGTH_SHORT).show();
-
SP真实实战
实现 自动登录 和 记住密码
SQLite学习
SQLite介绍
关系型数据库
嵌入性设备 ,体积小,功能强大,嵌入性数据库,几十kb
iso:Sqlite数据库
android 里面的数据库是由底层的sqilt.c的代码来动态生成的
Mysql用户手动创建
sqilt.c 代码动态创建
SQLite增删改查
android 封装了一个类 SqliteOpenHelper 工具类,完成数据库的增删改查。是一个抽象类,我们必须继承它去实现。
public class Main3Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
}
/*
* 生成DB文件
* */
public void creatDB(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);
//(helper.getReadableDatabase())
// helper.getWriteableDatabase()
// database创建靠这句话
SQLiteDatabase readableDatabase = helper.getReadableDatabase();
}
public void query(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);
SQLiteDatabase db = helper.getReadableDatabase();
if(db.isOpen()){//数据库打开成功 返回true
//返回 游标
Cursor cursor = db.rawQuery("select * from persons", null);
//迭代游标 遍历数据 游标下移
while (cursor.moveToNext()){
//偷懒的写完
//int _id = cursor.getInt(0);
//String name = cursor.getString(1);
// 标准写法
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.d("derry","query:_id:" + _id + "name" + name);
}
//一定记得关闭游标 否则 耗费性能
cursor.close();
db.close();
}
}
/*
插入到数据库
* */
public void insert(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);
SQLiteDatabase db = helper.getWritableDatabase();
//确保数据款打开,才能放心操作,规范
if(db.isOpen()) {
//插入语句
String sql = "insert into persons(name) values('Derry老师')";
db.execSQL(sql);
}
// 规范 : 必须关闭
db.close();
}
/*
* 修改 第五条数据
* */
public void update(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);
SQLiteDatabase db = helper.getWritableDatabase();
//确保数据款打开,才能放心操作,规范
if(db.isOpen()) {
//修改语句
String sql = "update persons set name =? where _id =?";
db.execSQL(sql,new Object[]{"李连杰",5});
}
// 规范 : 必须关闭
db.close();
}
public void delete(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);
SQLiteDatabase db = helper.getWritableDatabase();
//确保数据款打开,才能放心操作,规范
if(db.isOpen()) {
//修改语句
String sql = "delete from persons where _id =?";
db.execSQL(sql, new Object[]{4});
}
// 规范 : 必须关闭
db.close();
}
}
Room
SQlite 数据款的抽象
流程医用的访问数据库
你只要写一个类,这个类完成注解,就是一张表
Room 三角色介绍
Student(Entity)
Student(DAO)
studentDatabase(DB)
以往: SQLIte 帮助类 , 执行SQL语句 创建表 繁琐
ROOM(SQlite封装)
@Entity
class Student{}
@Dao
class StudentDao{}
@Database(数据库名字,版本号)
class StudnetDb{}