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

来源:互联网 发布:java jdbc mysql 编辑:程序博客网 时间:2024/05/22 17:29

一 、文件存储

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");
0 0
原创粉丝点击