数据存储


SP(SharePreferences)

public SharedPreferences getSharedPreferences(String name, int mode) {
    throw new RuntimeException("Stub!");
}

name:SP的名字

mode:SP保存时用的模式:

常规(每次保存都会更新):Context.MODE_PRIVATE

追加(每次保存都会追加到后面):Context.MODE_APPEND

添加数据

通过apply()方法添加

public void saveToSP(View view){
    SharedPreferences sp = getSharedPreferences("SPDerryName", Context.MODE_PRIVATE);
    sp.edit().putString("DerryKey","九阳神功").apply();
}

添加后出现如下文件夹

数据存放在xml文件中:

获取数据

public void getSPData(View view) {
    SharedPreferences sp = getSharedPreferences("SPDerryName", Context.MODE_PRIVATE);
    String value = sp.getString("DerryKey", "默认值");//假设DerryKey获取值为空,则使用默认值返回
    Toast.makeText(this,""+value,Toast.LENGTH_SHORT).show();
}

SQLite

基本变量

数据库名称

数据库版本号

新建类继承于SQLiteHelper

public class MySqliteOpenHelper extends SQLiteOpenHelper {

    private static SQLiteOpenHelper mInstance;
    public static synchronized SQLiteOpenHelper getmInstance(Context context){
        if(mInstance == null){
            mInstance = new MySqliteOpenHelper(context,"derryDB.db",null,1);
        }
        return mInstance;
    }

    private MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //创建表 表数据初始化 数据库第一次创建时调用 不会重复创建 即此函数只执行一次
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //创建表:person表 _id name

        //主键:primary key是唯一的
        //自动增长关键字:autoincrement
        //_id标准写法 主键只能是Integer类型

        String sql = "create table persons(_id integer primary key autoincrement,name text)";

        sqLiteDatabase.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

创库、创表

SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);

//Datebase 文件夹创建
SQLiteDatabase readableDatebase = helper.getReadableDatabase();

增删改查

//查询
public void query(View view) {
    SQLiteOpenHelper helper = MySqliteOpenHelper.getmInstance(this);
    SQLiteDatabase db = helper.getReadableDatabase();

    if(db.isOpen()){
        //返回游标
        Cursor cursor = db.rawQuery("select * from persons", null);
        //迭代游标 往下移来遍历数据
        while (cursor.moveToNext()){
            @SuppressLint("Range") int _id = cursor.getInt(cursor.getColumnIndex("_id"));
            @SuppressLint("Range") 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

Room是对SQLite数据库的抽象封装,从而实现流畅地访问数据库

Room的三角色

@Entity:表

@DAO:对表进行增删改查

@Datebase(数据库名字,版本号)

Entity

//一张表 (主键唯一、自动增长
@Entity
public class Student {
    @PrimaryKey(autoGenerate = true)//设置自动增长
    private int id;

    private String name;

    private int age;

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

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

@Dao

@Dao//datebase access object == 对表进行增删改查
public interface StudentDao {
    @Insert
    void insertStudents(Student ... students);

    @Update
    void updateStudents(Student ... students);

    @Delete
    void deleteAllStudents(Student ... students);

    @Query("DELETE FROM Student")
    void deleteAllStudents();

    @Query("SELECT * FROM Student ORDER BY ID DESC")
    List<Student> getAllStudent();
}

@Datebase

//数据库关联前面的表、数据库信息
@Database(entities = {Student.class} ,version = 1)
public abstract class StudentDatebase extends RoomDatabase {
    public abstract StudentDao getStudentDao();


    //单例模式 返回DB
    private static StudentDatebase INSTANCE;
    static synchronized StudentDatebase getInstance(Context context){
        if(INSTANCE ==null){
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                    StudentDatebase.class,"student_datebase").build();
            //
        }
        return INSTANCE;
    }
}

工具类DBEngine

public class DBEngine {
    private StudentDao studentDao;

    public DBEngine(Context context) {
        StudentDatebase studentDatebase = StudentDatebase.getInstance(context);
        studentDao = studentDatebase.getStudentDao();
    }

    //插入
    public void insertStudent(Student... students) {
        new InsertAsyncTack(studentDao).execute(students);
    }

    static class InsertAsyncTack extends AsyncTask<Student, Void, Void> {
        private StudentDao dao;

        public InsertAsyncTack(StudentDao studentDao) {
            dao = studentDao;
        }

        @Override
        protected Void doInBackground(Student... students) {
            dao.insertStudents(students);
            return null;
        }
    }

    //更新
    public void updateStudents(Student... students) {
        new UpdateAsynTack(studentDao).execute(students);

    }


    static class UpdateAsynTack extends AsyncTask<Student, Void, Void> {
        private StudentDao dao;

        public UpdateAsynTack(StudentDao studentDao) {
            dao = studentDao;
        }

        @Override
        protected Void doInBackground(Student... students) {
            dao.updateStudents(students);
            return null;
        }
    }

    //删除
    public void deleteStudents(Student... students) {
        new DeleteAsynTack(studentDao).execute(students);
    }

    static class DeleteAsynTack extends AsyncTask<Student, Void, Void> {
        private StudentDao dao;

        public DeleteAsynTack(StudentDao studentDao) {
            dao = studentDao;
        }

        @Override
        protected Void doInBackground(Student... students) {//有条件删除
            dao.deleteStudents(students);
            return null;
        }
    }

    //全部删除
    public void deleteAllStudents() {
        new DeleteAllAsyncTack(studentDao).execute();

    }

    static class DeleteAllAsyncTack extends AsyncTask<Void, Void, Void> {
        private StudentDao dao;

        public DeleteAllAsyncTack(StudentDao studentDao) {
            dao = studentDao;
        }

        @Override
        protected Void doInBackground(Void... voids) {
            dao.deleteAllStudents();
            return null;
        }
    }

    //查询
    public void queryAllStudents() {
        new QueryAsyncTack(studentDao).execute();
    }

    static class QueryAsyncTack extends AsyncTask<Void, Void, Void> {
        private StudentDao dao;

        public QueryAsyncTack(StudentDao studentDao) {
            dao = studentDao;
        }

        @Override
        protected Void doInBackground(Void... voids) {
            List<Student> allStudents = dao.getAllStudent();

            for (Student student : allStudents) {
                Log.i("Derry", "doInBackground: 全部查询" + student.toString());
            }
            return null;
        }
    }
}

用法:

private DBEngine dbEngine;

public void insertAction(View view) {
    Student student = new Student("张三",20);
    Student student1 = new Student("李四",20);
    Student student2 = new Student("王五",20);
    dbEngine.insertStudent(student,student1,student2);
}

public void updateAction(View view) {
    Student student = new Student("lisi",40);
    student.setId(3);
    dbEngine.updateStudents(student);
}

public void queryAction(View view) {
    dbEngine.queryAllStudents();
}

public void deleteAction(View view) {
    Student student = new Student(null,0);
    student.setId(3);
    dbEngine.deleteStudents(student);
}

public void deleteAllAction(View view) {
    dbEngine.deleteAllStudents();
}

Author: Xi Chen
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Xi Chen !
评论
  TOC