首页 > 代码库 > Android数据持久化技术

Android数据持久化技术

每一款Android应用除了界面外,需要与用户进行交互,网络数据获取等功能。因此,数据的存储对应用来说也举足轻重。

Android数据存储有下面五种方式:

     1> 文件存储

     2> SharedPreferences存储

     3> SQLite

     4> ContentProvider

     5> 网络存储

在这里,主要介绍前三种数据存储,即持久化存储。

1> 文件存储

 将数据存储到文件中:

     

public void save(){
    FileOutputStream out = null;
    BufferedWriter writer = null;
    out = openFileOutput("data",Context.MODE_PRIVATE);
    writer = new BufferedWriter(new OutputStreamWriter(out));
    writer.write(text);
}

最终文件data将保存在/data/data/<package_name>/files/目录下。

从文件读取数据:

public String read(){
    FileInputStream in = null;
    BufferedReader reader = null;
    StringBuilder content = new StringBuilder();

    try{
        in = openFileInput("data");
        reader = new BufferedReader(new InputStreamWriter(in));
        String line  = " " ;
        while((line = reader.readLine() != null){
             content.append(line);
        }
    }catch (IOException e){
        e.printStackTrace();
    }
    return content.tostring();
}

2> SharedPreferences存储

不同于文件的存储,sharedPreferences的存储是采用键值对的形式实现的。

三种获取sharedPreferences对象的方法。

1> Context类中的getSharedPreferencds()方法

2> Activity类中的getPreferencds()方法

     这个方法和Context类中的getSharedPreferencds()方法很类似,不过只接收一个操作模式参数,因为该方法会自动将当前活动的类名作为SharedPreferences的文件名。

3> PreferenceManager类中的getDefaultSharedPreferences()方法

     这是一个静态方法,它接受一个context参数,并自动使用当前应用程序包名作为前缀命名SharesPreferences文件。

储存数据:

  

SharesPreferences.Editor editor = getSharesPreferences("data",MODE_PRIVATE).edit();
editor.putInt("age",18);
editor.putString("name","Tom");
editor.apply();

读取数据:

SharedPreferences pref = getSharedPreferences("data","MODE_PRIVATE");
String name = pref.getString("name","");
Int age = pref.getInt("age","0");

SQLite数据库存储

Android为了更方便的管理使用数据库,提供了SQLiteOpenHelper帮助类。SQLiteOpenHelper是一个抽象类,定义了两个抽象方法:onCreate(),创建数据库;onUpgrade(),升级数据库。其中还有两个重要的实例方法,getReadableDatabase()和getWritableDatabase(),两个方法都可以创建或打开一个现有数据库,并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入时(比如磁盘空间已满),getReadableDatabase返回的对象将以读的方式去打开数据库,而getWritableDatabase方法将出现异常。

1> 新建类继承SQLiteOpenHelper

     

public class SQLHelper extends SQLiteOpenHelper {
    public SQLHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public static final String CREATE_BOOK = "create table Book("
            + "id integer primary key autoincrement,"
            + "author text,"
            + "price real,"
            + "pages integer,"
            + "name text)";
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        Log.d("azheng","compelte!");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2> MainActivity里创建数据库

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mButton;
    private SQLHelper mSQLHeper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSQLHeper = new SQLHelper(this,"Book.db",null,1);
        mButton = (Button) findViewById(R.id.button);
        mButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button:
                mSQLHeper.getWritableDatabase();
        }
    }
}

这样,数据库就写入成功了。

数据库操作:

增加:

SQLiteDatabase db = mSQLHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","Tom");
values.put("age","18");
db.insert("Book",null,values);

更新数据库:

db.update("Book",values,""name = ? ,new String[] {"Tom"});

表示更新名字为Tom的数据。

删除:

db.delete("Book","page > ?",new String[] {"500"});

表示删除页数大于500的数据。

查找数据库:

select * from Book

查找命令相对来说比较多,且更复杂,需要在操作数据库的时候不断熟练。

 

Android数据持久化技术