Android 持久化操作

目录

1、SharedPreferences存储

1.1 将数据存储到sp中

1.2 从sp中读取数据

2、Sqlite数据库存储

2.1 创建数据库

2.2 升级数据库

2.3 插入数据

2.4 更新数据

2.5 删除数据

2.6 查询数据

 2.7 通过SQL操作数据库


1、SharedPreferences存储

1.1 将数据存储到sp中

(1)通过Context.getSharedPreferences获取SharedPreferences对象,第一个参数是文件名,如果文件不存在,则会创建文件,第二个参数是操作模式,目前只有MODE_PRIVATE一种模式可选,表示只有当前app才能对这个文件进行读写
(2)通过SharedPreferences对象获取Editor对象
(3)通过Editor对象设置键值对
(4)调用Editor.apply方法提交键值对,存入文件中

SharedPreferences sp = getSharedPreferences("test", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("data1", "11");
editor.putString("data2", "22");
editor.putInt("data3", 44);
editor.apply();

(5)apply与commit的区别

        (5.1)apply没有返回值,而commit返回boolean表明修改是否提交成功 

        (5.2)apply将修改原子提交到内存,然后异步真正提交到磁盘;而commit是同步提交到磁盘,会阻塞调用它的线程。因此一定程度上apply效率高

1.2 从sp中读取数据

(1)通过Context.getSharedPreferences获取SharedPreferences对象
(2)调用SharedPreferences对象的getXXX方法获取存储的值

SharedPreferences sp = getSharedPreferences("test", MODE_PRIVATE);
String data1 = sp.getString("data1", "default");
int data3 = sp.getInt("data3", 0);

2、Sqlite数据库存储

2.1 创建数据库

(1)创建自定义类继承SQLiteOpenHelper,继承后需要重写构造方法,并实现两个方法onCrate和onUpgrade
        (1.1)构造方法一般用4个参数即可,第一个参数是上下文Context,第二个参数是数据库名称,第三个参数一般传入null,第四个参数是版本号,可用于数据库升级
        (1.2)重写onCreate方法,一般在该方法中创建表
        (1.3)重写onUpgrade方法,一般在该方法中做数据库升级的操作,比如新增表,修改表的列等等
2、当调用getWritableDatabase或getReadableDatabase方法时,会创建数据库(如果数据库不存在),并返回一个可读写的操作对象

自定义SQLiteOpenHelper对象

public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_BOOK = "create table Book(\n" +
            "\tid integer primary key autoincrement,\n" +
            "\tauthor text,\n" +
            "\tprice real,\n" +
            "\tpages integer,\n" +
            "\tname text)";
    private Context mContext;

    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_BOOK);
        System.out.println("onCreate table success======================");
    }

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

    }
}

 调用getWritableDatabase方法,创建数据库

SQLiteOpenHelper sqLiteOpenHelper = new MyDatabaseHelper(BroadCastActivity.this, "BookDb.db", null,1);
sqLiteOpenHelper.getWritableDatabase();

2.2 升级数据库

(1)在onUpgrade方法中新增一张表
(2)创建MyDatabaseHelper对象时,在构造函数中传入更高的版本号
(3)调用getWritableDatabase方法,此时会执行onUpgrade方法,升级数据库(由于BookDb.db数据库已经存在,onCreate方法不会再执行)

private static final String CREATE_CATEGORY = "create table Category(\n" +
            "\tid integer primary key autoincrement,\n" +
            "\tcategory_name text,\n" +
            "\tcategory_code integer)";

@Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL(CREATE_CATEGORY);
        System.out.println("onUpgrade table success======================");
    }

SQLiteOpenHelper sqLiteOpenHelper = new MyDatabaseHelper(BroadCastActivity.this, 
"BookDb.db", null,2);
sqLiteOpenHelper.getWritableDatabase();

2.3 插入数据

(1) 调用sqLiteOpenHelper.getWritableDatabase获取SQLiteDatabase对象,用来操作数据库
(2) 调用SQLiteDatabase.insert方法插入数据,该方法有三个参数,第一个是表名称,第二个用于在未指定添加数据的情况下给某些可为空的列自动赋值null,第三个是ContentValues对象

SQLiteOpenHelper sqLiteOpenHelper = new MyDatabaseHelper(BroadCastActivity.this, "BookDb.db", null,2);
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "111");
values.put("author", "zhang san");
values.put("pages", 454);
values.put("price", 16.9);
db.insert("Book", null, values);
values.clear();
values.put("name", "222");
values.put("author", "li si");
values.put("pages", 323);
values.put("price", 11.9);
db.insert("Book", null, values);

2.4 更新数据

(1)调用update方法,第一个参数是表名称,第二是ContentValues对象,第三个是where条件,第四个是where条件的参数,第三第四个参数不指定的话是更新所有

SQLiteOpenHelper sqLiteOpenHelper = new MyDatabaseHelper(BroadCastActivity.this, "BookDb.db", null,2);
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("price", 66.6);
        db.update("Book", values, "name = ?", new String[]{"222"});

2.5 删除数据

(1)调用delete方法,第一个参数是表名称,第二个是where条件,第三个是where条件的参数,第二第三个参数不指定的话会删除所有

SQLiteOpenHelper sqLiteOpenHelper = new MyDatabaseHelper(BroadCastActivity.this, "BookDb.db", null,2);
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
        db.delete("Book", "name = ?", new String[]{"111"});

2.6 查询数据

(1) 直接调用SQLiteDatabase.query方法获取Cursor对象,该方法参数如下


(2) 对Cursor对象进行解析获取数据
(3) cursor.close()关闭对象,防止资源泄漏

SQLiteOpenHelper sqLiteOpenHelper = new MyDatabaseHelper(BroadCastActivity.this, "BookDb.db", null,2);
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
        Cursor cursor = db.query("Book", null, null, null,null,null, "pages desc");
        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String author = cursor.getString(cursor.getColumnIndex("author"));
                int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                double price = cursor.getDouble(cursor.getColumnIndex("price"));
                System.out.println("name = " + name + ",author=" + author + ",pages=" +pages + ",price=" + price);
            } while (cursor.moveToNext());
        }
        cursor.close();

 2.7 通过SQL操作数据库

(1)添加数据

db.execSQL("insert into Book (name,author,pages,price) values(?,?,?,?)", new String[]{"code","zhangsn", "666", "16.99"})

(2)更新数据

db.execSQL("update book set price = ? where name = ?", new String[]{"10.99","zhangsan"})

(3)删除数据

db.execSQL("delete from Book where pages > ?",new String[]{"500"})

(4)查询数据

db.rawQuery("select * from book where name = ?", new String[]{"333"})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值