Unit6:持久化

1.文件存储

1.写出文件

    @Override
    protected void onDestroy() {
        super.onDestroy();
        String inputText = editText.getText().toString();
        save(inputText);

    }

    /**
     * Content类的openFileOutput(String a,int b)方法
     * a,创建的文件名称 /data/data/<packagename>/files/默认路径
     * b,操作模式 MODE_PRIVATE同名覆盖 MODE_APPEND存在追加
     * FileOutputStream 返回对象
     */
    public void save( String inputText) {

        BufferedWriter bufferedWriter = null;
        try {
            FileOutputStream out = openFileOutput("data", Context.MODE_PRIVATE);
             bufferedWriter = new BufferedWriter(new OutputStreamWriter(out));
            bufferedWriter.write(inputText);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedWriter != null) {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

2.读入文件

    public String load() {
        StringBuilder content = null;

        try {
            FileInputStream in = openFileInput("data");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = bufferedReader.readLine()) != null) {
                content = new StringBuilder().append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return content.toString();
    }

2.SharedPreferences存储

键值对,多数据类型存储
获取SharePreferences对象的三种方式

  1. context类中getSharePreferences(String 名称,int MODE_PRIVATE) MODE_PRIVATE只有当前应用程序可以对其读写
  2. activity类中 getPreferences(int MODE_PRIVATE) 默认类名为文件名
  3. preferenceManager类中 getDefaultShare(Context context) 活动包名作为文件名
    写出数据
// 1. 获取sharedPreference对象
// 2. 通过edit()获取edit对象
// 3. 通过putString()等放入数据
// 4. 通过apply()上传数据
                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
                editor.putString("name","tom");
                editor.putInt("age",20);
                editor.putBoolean("married",false);
                editor.apply();

读入数据

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

3.SQlite存储

SQLite数据库

名称 数据类型
integer 整型
real 浮点型
text 文本
blob 二进制

数据库连接工具 adb

命令 作用
1 Android Studio的模拟器连接数据库需要配置没有Google play的模拟器,否则无法访问数据库,权限不足
adb shell
su 切换root权限
cd /data/data/包名/databases/ 进入数据库
sqlite3 库名.db 进入数据库
.table 查看所有表
.schema 查看所有建表结构

使用litePal操作数据库

1.添加依赖包

  implementation 'org.litepal:LitePal:1.2.0'

2.设置Context

<application
        android:name="org.litepal.LitePalApplication"

或者继承LitepalApplication
3.创建映射配置

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore"></dbname>
    <version value="2"></version>

    <list>
        <mapping class="com.example.unit6_4_litepal.pojo.User"></mapping>
        <mapping class="com.example.unit6_4_litepal.pojo.Category"></mapping>
    </list>
</litepal>

4.创建映射

public class User extends DataSupport {        // 继承DataSupport,方便使用LitePal
    private String userName;
    private int passWorld;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getPassWorld() {
        return passWorld;
    }

    public void setPassWorld(int passWorld) {
        this.passWorld = passWorld;
    }

5.操作数据库
建立数据库

                Connector.getDatabase();  // 自动建立配置文件内的库和表结构。

添加数据

                Book book = new Book();
                book.setName("坏蛋是怎样炼成的");
                book.setAuthor("六道");
                book.setPages(1200);
                book.setPrice(19.21);
                book.setPress("UnKnow");
                book.save();               // 添加数据

删除数据

                 DataSupport.deleteAll("Book","author = ?","宋世玉");

修改数据

                Book book = new Book();
                book.setAuthor("宋世玉");
                book.updateAll("name = ?","坏蛋是怎样炼成的");

查询数据

//                简单查询
                List<Book> books = DataSupport.findAll(Book.class);
//                复杂查询
                List<Book> books1 = DataSupport.select("name", "author")
                        .where("price = ?", "19.21")
                        .order("pages")
                        .limit(1)
                        .offset(1)
                        .find(Book.class);
                for (Book book: books1) {
                    System.out.println("书名:" + book.getName());
                    System.out.println("作者:" + book.getAuthor());
                    System.out.println("出版社:" + book.getPress());
                    System.out.println("价格:" + book.getPrice());
                    System.out.println();
                }

//                终极查询:直接SQL语句查询
                Cursor cursor = DataSupport.findBySQL("select * from Book");
                if (cursor.moveToFirst()) {
                    do {
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                    }while (cursor.moveToNext());
                }
                cursor.close();
            }
        });

posted @ 2020-09-15 18:51  ssy197  阅读(126)  评论(0)    收藏  举报