Android SharedPreferences 与 SQLite 基本使用

目录

一. SharedPreferences

二. SQLite


一. SharedPreferences

       SharedPreferences 属于轻量级的键值对存储方式,支持基本数据类型存储,所保存的数据会以xml格式文件储存在手机内存。

       1.使用 SharedPreferences 储存数据

        首先需要获取到 SharedPreferences 对象。主要有如下方法。

//第一个参数为文件名称,第二个为操作模式(目前只有MODE_PRIVATE模式)

SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);

//使用时自动将当前活动类名作为文件名

SharedPreferences pref = getPreferences(MODE_PRIVATE);

//参数为Context,自动使用当前包名作为前缀命名文件。

SharedPreferences pref = getDefaultSharedPreferences(this);

  然后调用SharedPreferences 对象的edit()获取一个SharedPreferences.Editor对象,利用这个对象添加数据,调用apply()

 方法提交完成存储。例子如下:

存储什么数据类型,就调用对应的put方法。

2.获取 SharedPreferences 中数据

同样先根据名称获取SharedPreferences 对象,再调用get方法获取相应数据。例子如下:

其中get方法第二个参数为缺省值,如果没有找到对应值就会用缺省值代替赋值。

二. SQLite

 SharedPreferences 只能存储一些简单数据和键值对,当需要存储大量复杂关系型数据时,使用SQLite数据库比较适合。

SQLite是一款轻量级的关系型数据库,适合移动设备使用,是Android 内置的数据库。

1.创建数据库

android 专门提供了 SQLiteOpenHelper 帮助类来进行数据库的建立和升级。这是一个抽象类,我们通过继承它并建立构造函数,重写onCreate(),onUpgrade()方法。在这两个方法内实现创建,升级数据库逻辑。在操作数据库时需要了解一点SQL语句。

建表语句:

create table tableName(
    id integer primary key autoincrement,//primary key 将id列为主键,autoincrement表示id列
                                         //自增长                                                 
    attrName type) //attrName为属性名,type为其类型。常见有integer表整型,real浮点型,text文本型

创建例子:

        SQLIiteOpenHelper中有2个构造函数可供重写(一般使用参数少的),图中第一个参数为Context,有他才能对数据库操作。第二个为数据库名字。第三个允许我们在查询数据时返回一个自定义的Cursor,一步传入null。第四个为数据库版本号,可用于对数据库升级。构建SQLiteOpenHelper实例后,调用它的getReadableDatabase()或getWritableDatabase()方法创建数据库。

myDatebaseHelper helper = new myDatabaseHelper(this,"BOOK",null,1);
helper.getReadableDatabase(); // 或 helper.getWritableDatabase();

        SQLiteOpenHelper 有两个重要的实例方法:getReadableDatabase() 和 getWritableDatebase()。两者都可以创建或打开数据库,并返回一个可对数据库进行读写操作的对象。但当数据库不可写入时,前者返回对象以只读方式打开数据库,后者出现异常。

2.升级数据库

   SQLOpenHelper中的onUpgrade()方法用来对数据库进行升级。假设我们想在数据库中增加一张表,如果直接在SQLOpenHelper的onCreate()中添加执行建新表代码是无效的,原因是数据库已建立,onCreate()不会再次执行。所以应利用onUpgrade()方法。

先在onCreate()添加建表语句:

db.execSQL(CREATE_CATEGORY); //CREATE_CATEGORY为新表建表语句,Category为新表名字

然后在onUpgrade()中添加逻辑:

SQLiteOpenHelper构造方法的第四个参数为数据库版本号,为了让onUpgrade()执行,需改变版本号。之前我们传入为1,现在需传入一个比1大的数。

myDatabaseHelper helper = new myDatabaseHelper(this,"BOOK",null,2);

3.数据的增删查改

我们可以利用SQLiteOpenHelper 的 getReadableDatabase() ,getWritableDatabase()所返回的SQLiteDatabase()对象对数据进行增删查改。

① 增加数据:SQLiteDatebase提供insert方法来添加数据。

第一个参数为表名,第二个参数在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般传入null。第三个参数是一个

ContentValues对象,它提供一系列的put()方法重载,用于向ContentValues添加数据,只需将表中每个列名以及相应插入数据传入即可。

② 更新数据 :SQLiteDatebase提供update方法来更新数据。

第一个参数是表名,第二个同样是ContentValues,用来储存更新的数据。第三,四个参数指明更新哪几行的数据。图中是指更新name列 值为 book1 那一行的数据。其中?为占位符,可在第四个参数提供字符串数组表示占位符相应内容。

③ 删除数据:SQLiteDatebase提供delete方法来删除数据。

SQLiteDatabase db = helper.getWritableDatabase();
db.delete("Book","pages > ?", new String[]{"260"});

第一个参数为表名,第二个参数,第三个参数用来指明删除哪些行数据(跟更新同理 ),不指定默认删除全部。

④ 查询数据:SQLiteDatebase提供query方法来更新数据。

       查询操作比较复杂,query最短的一个方法重载也有7个参数。但多数情况下只需要传入几个参数就可以完成查询。调用query()方法会返回一个Cursor对象,查询所得数据通过此对象获得。

query()方法参数 描述
table 查询表名
columns 查询列名
selection where的约束条件
selectionArgs 为where中占位符提供具体值
groupBy 指定group by 的列
having 对group by后的结果进一步约束
orderBy 指定查询结果的排列方式

一个简单例子:

调用Cursor的get方法得到所需数据。

猜你喜欢

转载自blog.csdn.net/Yang_RT/article/details/81142416