Android 应用程序数据持久化方法
2017-04-21 22:21
309 查看
一 、文件存储
二、SharedPreference 保存数据
三、SQLite 数据库存储
首先 继承SQLiteOpenHelper 类 实现 onCreate和 onUpgrade 方法
在MainActivity中创建数据库
增删改查 操作核心代码
=======使用 开源库 LitePal 操作数据库=========
参考 https://github.com/LitepalFramework/LitePal
1、添加依赖库
2、配置litepal.xml文件 ,在app/src/main 下创建assets 文件夹 创建 litepal.xml文件 如下配置
3、 修改AndroidManifest.xml 文件
4、创建Book实体类 Bean格式 getter和setter 方法
5、修改litepal.xml 文件
6、然后在按钮 点击中 调用 Connector.getDatabase(); 就可以创建数据库
7、 升级数据库只需要实体类 或者 修改litepal.xml 文件 添加
8、添加数据
9、更新数据
10 、删除数据
11、查询数据
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");
相关文章推荐
- Android实现数据持久化的三种方法
- 十二.Android数据持久化方法之一——文件保存
- Android应用程序四种数据存取方法总结
- 十三.Android数据持久化方法之一——SQLite
- Android数据持久化的方法
- android数据持久化方法
- 关于android中数据持久化存储的方法的知识整理
- Android数据持久化之读写SD卡中内容的方法详解
- Android中数据存储的几种方法
- Android四种保存数据的方法
- 习题4:编写一个控制台应用程序,定义一个类MyClass,类中包含有public、private以及protected数据成员及方法。
- android ContentProvider共享数据方法
- Android应用程序的Java数据更新和UI同步改变
- Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲述了Android中不同Activity之间的数据传递 — Bundle对象的实现(-)+Android中Bundle的使用示例
- android 应用程序数据共享shareuserid篇+ContentResolver+ContentProvider
- android 应用程序Activity之间数据传递与共享的几种途径
- Android 应用程序之间数据共享—ContentResolver
- 另一个更简单的Android应用程序全屏的方法
- Android中数据存储的5中方法
- Android开发中保存数据的四种方法方法