IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android的三种持久化方式 -> 正文阅读

[移动开发]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第一行代码"});
    }
});

查询数据:
在这里插入图片描述

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();
                }
            }
        });
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:20:36  更:2021-07-27 16:21:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 19:44:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码