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();
}