数据存储

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{}

posted @ 2021-04-13 12:03  AronJudge  阅读(112)  评论(0编辑  收藏  举报