• Android学习_数据持久化


    数据持久化:将内存中的瞬时数据存储到设备中

    1.  文件存储

    存储一些简单的文本数据或二进制数据。

    核心:Context类提供的openFileOutput()和openFileInput()方法,然后再用Java的各种流进行读写操作。、

    1)         写数据到文件

    Step1:FileOutputStream out = openFileOutput("data", Context.MODE_PRIVATE);    

    // openFileOutput()可用于将数据存储到指定文件中,文件默认存储路径为/data/data/<packagename>/files/目录下。第一个参数是文件名,第二个参数是操作模式。该方法返回一个FileOutputStream对象,FileOutputStream类用来创建一个文件并向文件中写数据,如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

    Step2BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));                //使用OutputStreamWriter构建BufferedWriter对象

    Step3writer.write(inputText);     //将文本写入文件

    提示:查看数据通过View > Tool Windows > Device File Explorer

    2)         从文件中读数据

    Step1FileInputStream in = openFileInput("data");      

    Step2BufferedReader reader = new BufferedReader(new InputStreamWriter(in));

    Step3String line = “”;

    while((line = reder.readLine() != null)){

    content.apped(line);

    }

    2.       SharedPreferences存储

    使用键值对存储数据,支持不同数据类型,更简单方便,应用场景更多。

    SharedPreferences文件都是存放在/data/data/<package name>/shared_prefs/目录下,并且是XML格式。

    核心:使用SharePreferences对象和SharedPreferences.Editor对象

    1)         写数据到SharedPreferences

    Step1获取SharedPreferences对象:

    方法一:Context类的getSharedPreferences()方法,第一个参数指定文件名,如果指定的文件不存在就创建一个;第二个参数是操作模式(只有MODE_PRIVETE一种且为默认的,表示只有当前应用程序才可以对这个SharedPreferences进行读写操作)。

    方法二:Activity类的getPreferences()方法,只接收操作参数,该方法自动将当前活动的类名作为SharedPreferences的文件名。

    方法三:PreferenceManager类的getDefaultSharedPreferences()方法,接收一个Context参数,自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。

    Step2调用SharedPreferences对象的editor()方法获取SharedPreferences.Editor对象。

    Step3调用SharedPreferences.Editor对象的一系列put方法(如:putString(“name”,”Tom”)),方法第一个参数是键。

    Step4调用SharedPreferences.Editor对象的apply()方法将添加的数据提交。

    2)         从SharedPreferences中读数据

    Step1使用getSharedPreferences()方法获取SharedPreferences对象。

    Step2调用SharedPreferences对象的一系列get方法(如getString(“neme”,””)),第一个参数是键;第二个参数是默认值,表示当传入的键找不到时返回什么样的默认值。

    3.       SQLite数据库存储

    1)         创建数据库

    Step1继承SQLiteOpenHelper抽象类,重写onCreat()和onUpgrate()方法。onCreate(SQLiteDatebase db)方法处理一些创建表的逻辑,即调用SQLiteDatebase的execSQL(CREATE_BOOK)方法执行建表语句:

               create table Book(

                          id integer primary key autoincrement,

                          author text,

                          price real,

                          pages integer,

                   name text)

    Step2构建SQLiteOpenHelper的实例:new MyDatabaseHelper(this, “BookStore.db”, null, 1);

    (SQLiteOpenHelper的常用构造方法有四个参数:参数一为Context;参数二为数据库名(String);参数三表示允许查询数据时返回一个自定义Cursor,一般都传入null;参数四为当前数据库的版本号(int))

    Step3调用SQLiteOpenHelper的实例的getReadableDatabase()或getWriteabeDatabase()方法,此时onCreate()和onUpgrate()会执行。这两种方法都可以创建或打开数据库(创建的数据库会存放在/data/data/<package name>/databases/ 目录下),不同之处在于当数据库不可写入时,getReadableDatabase()

    返回的对象将以只读的方式打开数据库,而getWriteabeDatabase()将出现异常。

    2)         升级数据库

    Step1在onUpgrade()方法中添加DROP语句:

             public volid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

                        db.execSQL(“drop table if exists Book”);

                       db.execSQL(“drop table if exists Category”);

                       onCreate(ab);

    }

    发现数据库中存在已有表格就将其删除。

    Step2构建SQLiteOpenHelper的实例:new MyDatabaseHelper(this, “BookStore.db”, null, 2); 版本号传入比1大的数。

    3)         添加数据

    CRUD(Create,Retrieve,Update,Delete)。调用getReadableDatabase()或getWriteabeDatabase()方法会返回一个SQLiteDatabase对象,借助该对象进行CRUD操作。

    Step1获取SQLiteDatabase对象

    Step2创建ContentValues对象

    Step3使用ContentValues对象的put方法添加数据

    Step4:调用SQLiteDatabase对象的insert()方法

    4)       增(insert)

    CRUD(Create,Retrieve,Update,Delete)。调用getReadableDatabase()或getWriteabeDatabase()方法会返回一个SQLiteDatabase对象,借助该对象进行CRUD操作。

    Step1使用getReadableDatabase()或getWriteabeDatabase()获取SQLiteDatabase对象。

    Step2创建ContentValues对象(ContentValues是一种数据存储机制,且只能存储基本类型的数据)。

    Step3使用ContentValues对象的put方法对要添加数据进行组装。

    Step4:调用SQLiteDatabase对象的insert(“Book”, null , values)方法插入一条数据。该方法第一个参数是表名;第二参数一般填null;第三个参数就是前面的ContenValues对象。

    5)      改(update)

    前三步与添加数据相同。

    Step4调用SQLiteDatabase对象的update (“Book”, values, “name = ?”, new String[] {“The Da Vinci Code”})修改数据。该方法第三、第四个参数用于约束更新某一行或某几行的数据,不指定就默认更新所有行。

    6)      删(delete)

    Step1使用getReadableDatabase()或getWriteabeDatabase()获取SQLiteDatabase对象。

    Step2调用SQLiteDatabase对象的delete(“Book”, “pages > ?”, new String[] {“500”} )方法删除数据。该方法第二、第三个参数用于约束删除某一行或某几行的数据,不指定就默认删除所有行。

    7)      查(query)

    Step1使用getReadableDatabase()或getWriteabeDatabase()获取SQLiteDatabase对象。

    Step2调用SQLiteDatabase对象的qury()方法查询数据,返回一个Cursor对象。

    query()方法用于对数据进行查询,最短的七个参数:

    Query()方法参数

    对应SQL部分

    描述

    Table

    from table_name

    指定查询的表名

    Columns

    Select colummn1,column2

    指定查询列名

    Selection

    Where column = value

    指定where的约束条件

    selectionArgs

    为where中的占位符提供更具体的值

    groupBy

    Group by column

    指定需要group by的列

    having

    Having column= value

    对group by后的结果进一步约束

    orderBy

    Order by column1,column2

    指定查询结果的排序方式

    Step3使用Cursor对象的moveToFirst()将数据的指针移到第一行,然后进入循环中使用Cursor对象的一系列get方法读取数据:String name = cursor.getString(cursor.getColumnIndex(“name”));

    Cursor对象的getColumnIndex()方法获取某一列在表中对应的位置索引,在通过这个索引读取数据。

    8)      使用SQL操作数据库

     查询操作调用SQLiteDatebase的rawQuery()方法,其他操作都调用execSQL()方法。

  • 相关阅读:
    gcc 使用中常用的参数及命令
    Android build system & Android.mk 规范
    ndkgdb对java/native code联合调试
    Android NDK开发指南(一) Application.mk文件
    字符编码知识:Unicode、UTF8、ASCII、GB2312等编码 及 转换
    C & C++ 中值得注意的编译,链接,调试,错误及其原因
    JNI 调用规范
    Graphic 矢量图形的区域填充与缠绕规则
    Android NDK开发指南(二)Android.mk文件
    JNI 之二 :java & c/c++ 相互通信及调用
  • 原文地址:https://www.cnblogs.com/pomodoro/p/11315217.html
Copyright © 2020-2023  润新知