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

被折叠的 条评论
为什么被折叠?



