Android 应用程序数据持久化方法

一 、文件存储

public class MainActivity extends AppCompatActivity {
    private EditText text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (EditText) findViewById(R.id.edit);

        String inputText = load();
        if(!TextUtils.isEmpty(inputText)){

            text.setText(inputText);
            text.setSelection(inputText.length());
            Toast.makeText(this, "恢复成功!!!", Toast.LENGTH_SHORT).show();
        }
    }
    //在活动销毁的时候保存数据到文件中 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        String input_text = text.getText().toString();
        Save(input_text);
    }

    //保存数据到文件中
    private void Save(String input_text) {

        FileOutputStream fos = null;
        BufferedWriter bw = null;

        try {

            fos = openFileOutput("data.txt", Context.MODE_PRIVATE);
            bw =new BufferedWriter(new OutputStreamWriter(fos));
            bw.write(input_text);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fos!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //从文件中 加载恢复数据
    private String load(){
        FileInputStream fis = null;
        BufferedReader br = null;
        StringBuilder context = new StringBuilder();

        try {
            fis = openFileInput("data");
            br = new BufferedReader(new InputStreamReader(fis));
            String line =  "";

            while((line =br.readLine())!= null){
                context.append(line);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return context.toString();
    }
}

二、SharedPreference 保存数据

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //保存数据
        Button save_data = (Button) findViewById(R.id.save_data);
        save_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过SharedPreferences 获取到edit对象    文件默认以 XML形式 存储
                SharedPreferences.Editor editor =  getSharedPreferences("data",MODE_PRIVATE).edit();
                //添加数据
                editor.putString("name","Tom");
                editor.putInt("age",18);
                editor.putBoolean("married",false);
                //应用
                editor.apply();
            }
        });

        //恢复数据
        Button restore_data = (Button) findViewById(R.id.restore_data);
        restore_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 获取到SharedPreferences对象    
                SharedPreferences spf = getSharedPreferences("data",MODE_PRIVATE);
                //通过键 获取变量值 
                String name = spf.getString("name","");
                int age  = spf.getInt("age",0);
                boolean married = spf.getBoolean("married",false);

                Toast.makeText(MainActivity.this, "name :"+name+" age :"+age +" married :" + married + " .", Toast.LENGTH_SHORT).show();
            }
        });

    }
}

三、SQLite 数据库存储

首先 继承SQLiteOpenHelper 类 实现 onCreate和 onUpgrade 方法

    public class MyDateBaseHelper extends SQLiteOpenHelper {

        public static final String CREAATE_BOOK = "create table Book ("
                +"id integer primary key autoincrement,"
                +"author text" +
                "price real" +
                "pages integer" +
                "name  text )";

        public static final String CREAATE_CATEGORY = "create table Category ("
                +"id integer primary key autoincrement,"
                +"category_name text" +
                "category_code  integer )";

        private  Context mContext;

        public MyDateBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
            mContext =context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREAATE_BOOK);
            db.execSQL(CREAATE_CATEGORY);
            Toast.makeText(mContext, "数据库创建成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            //这个方法在 version大于之前数据库的version 才会执行
            db.execSQL("drop table if exists Book");
            db.execSQL("drop table if exists Category");
            onCreate(db);
        }
}

在MainActivity中创建数据库

public class MainActivity extends AppCompatActivity {

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

        dateBaseHelper = new MyDateBaseHelper(this,"MyBookStore.db",null,2);
        Button create_dataBase = (Button) findViewById(R.id.create_database);
        create_dataBase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取可写的数据库
                dateBaseHelper.getWritableDatabase();
            }
        });
    }
}

增删改查 操作核心代码


//获取当前的数据库
  SQLiteDatabase db = dateBaseHelper.getWritableDatabase();

//插入数据
 db.execSQL("insert into Book (name,author,pages,price) values(?,?,?,?)",new String[]{"The Code Life","John" ,"510","13.98" });

//更新数据
 db.execSQL("update Book set price = ? where name = ?",new String[]{ "88.88","The Code Life"});

 //删除数据
 db.execSQL("delete from Book where pages > ?",new String[]{ "520" });

//查询数据
 db.rawQuery("select * from Book",null);

=======使用 开源库 LitePal 操作数据库=========

参考 https://github.com/LitepalFramework/LitePal

1、添加依赖库

 compile 'org.litepal.android:core:1.5.1'

2、配置litepal.xml文件 ,在app/src/main 下创建assets 文件夹 创建 litepal.xml文件 如下配置

 <?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--
        定义应用的数据库名称默认以".db"结尾,
        如果没有".db"结尾 LitePal 会自动添加
        例如: <dbname value="demo" />
    -->
    <dbname value="demo" />

    <!--
        定义数据库的版本号,当你想升级数据库,只需在原有版本号增加1 
    -->
    <version value="1" />

    <!--
        定义表的实例对象映射
        例如: 
        <list>
            <mapping class="com.test.model.Reader" />
            <mapping class="com.test.model.Magazine" />
        </list>
    -->
    <list>

    </list>

    <!--
        定义 .db文件的存储位置 
        "internal" 表示内置内存中
        "external" 表示外置存储卡
        "internal" 为默认
        例如:<storage value="external" />
    -->

</litepal>

3、 修改AndroidManifest.xml 文件

<manifest>
    <application
        android:name="org.litepal.LitePalApplication"
        ...
    >
        ...
    </application>
</manifest>

4、创建Book实体类 Bean格式 getter和setter 方法

5、修改litepal.xml 文件

<list>
    <mapping class="info.emotionalronan.litepaltest.Book" />

</list>

6、然后在按钮 点击中 调用 Connector.getDatabase(); 就可以创建数据库

7、 升级数据库只需要实体类 或者 修改litepal.xml 文件 添加

<list>
    ...
    <mapping class="info.emotionalronan.litepaltest.Category" />

</list>

8、添加数据

Book book = new Book();
book.setName("The Da Life Code");
book.setAuthor("Dan Drown");
book.setPages(454);
book.setPrice(67.89);
book.setPress("Unknow");
book.save(); //保存数据

9、更新数据

Book book = new Book();
book.setPrice(88.88);
book.setPress("Anchor");
//通过条件 更新以上的数据
book.updateAll("name = ? and author = ?","The Da Life Code","Dan Drown");

//恢复 price 为  默认值
Book book = new Book();
book.setToDefault("price");
book.updataAll();

10 、删除数据

DataSupport.deleteAll(Book.class,"price < ?","12");

11、查询数据

//指定id 查找
Book book = DataSupport.find(Book.class, id);

//查找表book的所有
List <Book> books = DataSupport.findAll(Book.class);

// 条件查询
List<Book> books = DataSupport.where("name like ?", "book%").order("duration").find(Book.class);

//通过原生SQL查询  返回的是游标 需要用SQL的方法遍历
Cursor c = DataSupport.findBySQL("select * from Book where pages > ? and price < ? ", "400", "20");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值