天天看点

Android的三种持久化方式

1、使用文件进行存储

//将要存储的数据通过String s进行存储
public void save(String s){
    //向文件输入字节流
    FileOutputStream out = null;
    //写入字符的缓冲区
    BufferedWriter writer = null;
    try {
    //openFileOutput方法得到FileOutputStream对象
        out = openFileOutput("data", Context.MODE_PRIVATE);
        //将文件字节流转化为字符流,并传输缓存区数据
        writer = new BufferedWriter(new OutputStreamWriter(out));
        //将字符串写入缓存区
        writer.write(s);
    }
     catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if(writer != null){
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
           

将数据存储到文件后,从文件读取数据

public String load(){
    //读取文件字节流
    FileInputStream in = null;
    //读入的字符型缓冲区
    BufferedReader reader = null;
    //字符串数组content
    StringBuilder content = new StringBuilder();
    try {
        //创建读取文件字节流对象in
        in = openFileInput("data");
        //将从文件读取的字节数据转化为字符型,存放在缓冲区
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        //如果读取文件中的一行不为空
        while((line = reader.readLine())!=null){
        //将读取到的数据加入content
            content.append(line);

        }
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(reader!=null){
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return content.toString();
}
           

2、SharedPrefernces存储:按键值对存储

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        
        //创建SharedPreferences对象
        SharedPreferences.Editor editor = getSharedPreferences("data01", MODE_PRIVATE).edit();
        //导入数据
        editor.putString("name","jmm");
        editor.putInt("age",23);
        //提交数据
        editor.commit();
    }
});
           

从SharedPrefernces取出数据

btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //创建SharedPreferences对象
        SharedPreferences pref = getSharedPreferences("data01", MODE_PRIVATE);
        //导出数据
        String name = pref.getString("name","");
        int age = pref.getInt("age",0);
        Log.e("0726", "name is: "+name);
        Log.e("0726", "age is:"+age);
    }
});
           

3、使用Sqlite持久化数据

创建MyDatabaseHelper类继承自SQLiteOpenHelper,重写父类两个方法及创建构造方法

//创建数据库的构造方法,需要一个context,给数据库名,以及版本号
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
    mcontext = context;
}

@Override
//在创建数据的时候创建数据库表

public void onCreate(SQLiteDatabase db) {
    //创建数据库
    db.execSQL(CREATE_BOOK);
    db.execSQL(CREATE_CATEGORY);
    Toast.makeText(mcontext,"Create succeeded",Toast.LENGTH_SHORT).show();
}

@Override
//数据库版本更新,在调用更新数据库方法时,如果存在删除数据库中的表,重新创建数据库表

public void onUpgrade(SQLiteDatabase db, int i, int i1) {

    db.execSQL("drop table if exists Book");
    db.execSQL("drop table if exists Category");
    onCreate(db);
}
           

创建数据库:

//创建对象
myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //创建数据库
        myDatabaseHelper.getWritableDatabase();
    }
});
           

增加数据:

add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //获取对象
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name","Android第一行代码");
        values.put("author","郭霖");
        values.put("pages",552);
        values.put("price",79);
        //将数据通过对象及方法传入
        db.insert("Book",null,values);
        values.clear();
    }
});
           

删除数据:

delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        //删除页数大于50的书籍信息,第二个参数处写where语句,第三个参数位置写入占位符信息
        db.delete("Book","pages > ?",new String[]{"500"});
    }
});
           

修改数据:

update.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("price",59);
        db.update("Book",values,"name = ?",new String[]{"Android第一行代码"});
    }
});
           

查询数据:

Android的三种持久化方式
query.setOnClickListener(new View.OnClickListener() {
    private static final String TAG = "0726";

    @Override
    public void onClick(View view) {
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        Cursor book = db.query("Book", null, null, null, null, null, null);
        if(book.moveToFirst()){
            do{
                String name = book.getString(book.getColumnIndex("name"));
                int pages = book.getInt(book.getColumnIndex("pages"));
                String author = book.getString(book.getColumnIndex("author"));
                double price = book.getDouble(book.getColumnIndex("price"));
                Log.e(TAG, "book name is "+name);
                Log.e(TAG, "book author is "+author);
                Log.e(TAG, "book pages are "+pages );
                Log.e(TAG, "book price is "+price );

            }while(book.moveToNext());
        }
        book.close();
    }
});
           

替换数据(使用事务):注释处为手动添加的异常,如果一场存在,状态会回滚,数据不会发生替换,也不会删除,去除异常,可以完成事务,数据被进行替换。

replace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
                db.beginTransaction();//开启事务
                try{
                    db.delete("Book",null,null);
//                    if(true){
//                        throw new NullPointerException();
//
//                    }
                    ContentValues values = new ContentValues();
                    values.put("name","Android从入门到放弃");
                    values.put("author","明日科技");
                    values.put("price",59.8);
                    values.put("pages",600);
                    db.insert("Book",null,values);
                    db.setTransactionSuccessful();
                }catch(Exception e){
                    e.printStackTrace();
                }finally {
                    db.endTransaction();
                }
            }
        });