Android开发_5:数据存储

本文介绍了Android中三种数据存储方式:文件存储,包括使用openFileOutput()方法;SharedPreferences,通过键值对方便地存储数据;SQLite数据库,详细讲解了创建、操作和升级数据库的过程,包括如何使用SQLiteOpenHelper、SQL语句以及Cursor对象进行数据交互。

此博客为学习Android开发的笔记型博客,若有任何不妥及需要补充之处,希望各位大神给予指正

文件存储

将数据存到文件中。所有的文件都是默认存到/data/data/< package name>/files/目录下。
Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定文件中。有两种模式可选,MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式,表示当文件存在时会覆盖原文件,MODE_APPEND模式下,当原文件存在时就往文件里面追加内容。

其实就是Java的文件存储

将文本存入文件中:
在这里插入图片描述
读取文件:
在这里插入图片描述

SharedPreferences存储数据

SharedPreferences是通过键值对存储数据的,读取时可以通过key来获取数据,比文件存储方便很多。

SharedPreferences文件默认存储在/data/data/< package name>/shared_prefs/目录下

首先获取SharedPreference对象:
1.Context类中的getSharedPreferences()方法:
接收两个参数,第一个参数用于指定文件名,第二个参数用于指定操作模式,目前只有MODE_PRIVATE一种模式,也是默认的模式,传参时填 0 就好了。
2.Activity类中的getPreferences()方法:
只接收一个操作模式参数,文件名默认为该Activity的类名。
3.PreferenceManager类中的getDefaultSharedPreferences()方法:
这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。

存储数据:
1.调用edit()方法来获取一个SharedPreferences.Editor对象
2.向SharedPreferences.Editor对象中添加数据,eg:putString()
3.调用applay()将添加的数据提交

SharedPreferences.Editor editor=getSharedPreferences("data",0).edit();
                editor.putString("name","Tom");
                editor.putInt("sex",1);
                editor.putInt("age",1);
                editor.apply();

读取数据:
与putString()等方法对应,SharedPreferences对象都提供了对应的get方法。
(注意:这里的get方法是SharedPreferences对象的,不是SharedPreferences.Editor对象的)

SharedPreferences sharedPreferences=getSharedPreferences("data",0);
String name=sharedPreferences.getString("name","");
int sex=sharedPreferences.getInt("sex",-1);
int age=sharedPreferences.getInt("age",-1);
Log.d(TAG, "name: "+name);
Log.d(TAG, "sex: "+sex);
Log.d(TAG, "onClick: "+"age: "+age);

SQLite数据库存储

Android为了方便管理数据库,专门提供了一个SQLiteOpenHelper的帮助类。但这是一个抽象类,我们需要创建一个子类去继承它。

SQLiteOpenHelper有两个抽象方法,onCreate( ) 和 onUpgrade( )。我们必须重写这两个方法。
SQLiteOpenHelper还有两个重要的实例方法:getReadableDatabase() 和 getWritableDatabase()。这两个方法都可以创建或打开一个数据库,并返回一个可对数据库进行读写的对象。不同的是,当数据库不可写入时,getReadableDatabase() 方法将以只读方式打开数据库,getWritableDatabase() 方法则会导致程序崩溃。

SQLiteOpenHelper的构造方法有两个,一般选用参数少的那个,这个构造方法接收四个参数:Context,数据库名,自定义的Cursor 或 null,当前数据库的版本号。

创建数据库

1.构建SQLiteOpenHelper实例
2.调用getReadableDatabase() 或 getWritableDatabase()方法
数据库默认存储于/data/data/< package name>/databases/目录下

创建数据库后onCreate方法会自动执行,我们一般在这个方法里放入建表语句。

    public static final String CREAT_BOOK="create table Book(" +
            "id integer primary key autoincrement," +
            "name varchar(32)," +
            "author varchar(32)," +
            "price double)";
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREAT_BOOK);
        Toast.makeText(context,"Database created success",Toast.LENGTH_SHORT);
    }

操作数据库

1.获取SQLiteOpenHelper实例

dbHelper=new MyDatabaseHelper(FirstActivity.this,"BookStore.db",null,2);

2.获取数据库

SQLiteDatabase db=dbHelper.getWritableDatabase();

3.操作数据库

db.execSQL("insert into Book(name,author,price) values(?,?,?)",new String[]{"Book1","Author_1","14.7"});
db.execSQL("insert into Book(name,author,price) values(?,?,?)",new String[]{"Book2","Author_2","16.7"});
db.execSQL("insert into Book(name,author,price) values(?,?,?)",new String[]{"Book3","Author_3","22"});
Cursor cursor=db.rawQuery("select name from Book where name = 'Book1'",null);
if(cursor.moveToFirst()) {
     String name1 = cursor.getString(cursor.getColumnIndex("name"));
     Log.d(TAG, "initDatabase: " + "name_1 is " + name1);
}

insert、delete、update、create table语句都是使用SQLiteDatabase.execSQL()方法中执行的。

select语句是使用SQLiteDatabase.rawQuery()执行的,并返回一个Cursor容器。
Cursor的指针是默认从-1开始的,所以要获得数据要先使用if(cursor.moveToFirst()) {} 语句。

然后使用 Cursor.getString( int ) 方法获得String字符串。

注意:
Cursor.getString( int ) 方法里面的参数为int,表示第几列,
然后Cursor还有一个方法 getColumnIndex( String ) ,里面的参数是String,是通过列名获得列的下标。

对,它没有直接通过列名获得String字符串的方法,这就很反人类!!!!!

所以你要使用 cursor.getString(cursor.getColumnIndex(“name”)) 来绕一圈。

升级数据库

onCreate()方法只有在创建数据库时才会调用,如果数据库已经存在,那么在获取数据库时,onCreate()方法是不会调用的。
那么如何对数据库进行修改呢?比如删一个表,再新建一个表。
这时候我们就需要调用另一个我们需要重写的方法了。对,就是onUpgrade()。
我们可以把需要进行的操作写到onUpgrade()方法中。

那么如何调用onUpgrade()方法呢?
获取SQLiteOpenHelper实例时,不是有四个参数嘛,第四个参数是当前数据库的版本号,只要输入的数字比之前的数字大,那么数据库就会更新,系统就会调用onUpgrade()方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值