第 6 章 数据存储
来源:互联网 发布:淘宝衣服缩水 编辑:程序博客网 时间:2024/06/03 13:51
一、文件存储
不对存储内容进行任何格式化处理,原封不动存储到文件中,适合于存储简单文本数据或二进制数据。
1、存储5部曲:
- 获取FileOutputStream对象,该对象通过Context类提供的openFileOutput()方法获取
- 获取OutputStreamWriter对象,传入参数为上面获取的FileOutputStream对象
- 获取BufferedWriter对象,该对象传入参数为上面获取的OutputStreamWriter对象
- 用BufferedWriter对象的write()方法将数据写入
- 关闭BufferedWriter对象
public void save(String inputText) { FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(inputText); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } } }
2、读取5部曲
- 获取FileInputStream对象
- 获取InputStreamReader对象,需要传入上面获取的FileInputStream对象
- 获取BufferedReader对象,需要传入上面的InputStreamReader对象;
- 用readLine()读取
- 关闭BufferedReader对象
public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString(); }
二、SharedPreferences存储
SharedPreferences采用键值对方式存储数据
1、存储4部曲
- 获取SharedPreferences对象 三种方法
1.1 Context类中getSharedPreferences()方法,两个参数,名称和操作模式
1.2 Activity类中getPreferences()方法:一个参数,操作模式
1.3 PreferenceManager类中getDefaultSharedPreferences()方法:一个参数context参数 - 调用SharedPreferences对象的edit()方法获取SharedPreferences.Editor对象
- 向SharedPreferences.Editor对象中添加数据,putString()、putBoolean()等
- 调用commit()写入数据
2、读取2部曲
- 获取SharedPreferences对象
- 利用getString()、getInt()等获取数据。传入两个参数,一是key,二是默认值,即如果找不到该key,则返回该默认值。
saveData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {// 1 文件名为 data.xml// SharedPreferences pref = getSharedPreferences("data", Context.MODE_PRIVATE);// 2 文件名为 MainActivity.xml// SharedPreferences pref = getPreferences(Context.MODE_PRIVATE);// 3文件名为 包名.xml SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); SharedPreferences.Editor editor = pref.edit(); editor.putString("name", "Tom"); editor.putInt("age", 28); editor.putBoolean("married", false); editor.apply(); String name = pref.getString("name", ""); int age = pref.getInt("age", 0); boolean married = pref.getBoolean("married", false); Log.d("MainActivity", "name is " + name); Log.d("MainActivity", "age is " + age); Log.d("MainActivity", "married is " + married); } });
三、SQLite数据库
1、创建数据库
首先,建立自己的public class MyDatabaseHelper extents SQLiteOpenHelper{}
SQLiteOpenHelper类为抽象类,需要重写两个抽象方法:onCreate()和onUpdate()
还要重写构造方法。参数最少的构造方法有四个参数:Context、database_name、Cursor(一般写null、vision版本号)。
然后,建立MyDatabaseHelper的对象,调用其getReadableDatabase()或 getWritableDatabase()方法。
public class MyDatabaseHelper extends SQLiteOpenHelper{ public static final String CREATE_BOOK="create table Book(id integer primary key autoincrement,author text,price real,pages integer,name text)"; private Context mcontext; public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); mcontext=context; } public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
在MainActivity中调用,
databaseHelper = new MyDatabaseHelper(this, "BookStore", null, 1);databaseHelper.getWritableDatabase();
此时,创建了一个名为BookStore,版本为1的数据库。并且,调用了onCreate()方法,建立了一个名为Book的表。
2、升级数据库
Tips
(1)当相同版本的数据库BookStore已经存在了,则MyDatabaseHelper中的onCreate()方法就不会执行了。
(2)如果创建表时发现该表已经存在,则会直接报错,所以需要将已经存在的表删除。
(3)只有当版本号比原来高,onUpdate()方法才会执行。
databaseHelper = new MyDatabaseHelper(this, "BookStore", null, 2);
添加一张表进去,并提高数据库版本
public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); Toast.makeText(mcontext, "创建成功", Toast.LENGTH_SHORT).show(); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists Book"); db.execSQL("drop table if exists Category"); onCreate(db); }
缺点:需要删除已经存在的表,以前的数据也会被删除。
3、添加数据
4、更新数据
5、删除数据
6、查询数据
7、直接使用SQL操作数据库
四、数据库最佳实践
1、使用事务
首先,开启事务:db.beginTransaction();
然后,执行数据库操作;
最后,事务成功:db.setTransactionSuccessful();
2、升级数据库最佳写法
之前升级数据库时,为了确保新增加的table之前没有,就先把table全部删除了,这样的行为是很不合常理的。
改进方法为:
改变version,然后在onUpdate()中进行判断,根据version执行不同的更新操作。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {switch (oldVersion) {case 1:db.execSQL(CREATE_CATEGORY);case 2:db.execSQL("alter table Book add column category_id integer");default:}}
如果是第一次安装,则直接进入onCreate(),直接安装最新版本;
如果第一次安装版本1,则进入onUpdate(),连续进行了两次升级;
如果第一次安装版本2,则进入onUpdate(),只进行了最后一次升级。
- 第 6 章 数据存储
- 第6章 数据存储全方案
- [Android][第一行代码][第 6 章 数据存储]
- 第6章 数据存储之使用LitePal操作数据库
- 第2章 变量和数据存储
- 【Android】第4章 数据存储(上)
- 第一行代码-第6章 数据存储方案,持久化技术
- 数据加载、存储与文件格式 利用Python进行数据分析 第6章
- 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式
- 《利用Python进行数据分析》第6章 数据加载、存储与文件格式
- Android学习之 第 6 章 数据存储全方案,详解 持久化技术
- Android学习之 第 6 章 数据存储全方案,详解 持久化技术
- 数据存储练习题-(OpenCV第3章习题8)
- 第8章 Android数据存储与IO
- 学习笔记 第7章 数据存储与访问
- 第<1>章 数据引用与匿名存储
- 第一行代码笔记,第六章-----详解数据存储
- 第5章 存储Node程序中的数据
- android 状态栏总结
- NDK拆分合并文件
- elasticsearch集群生态介绍,分片及其水平扩展
- Redis常用数据类型详解
- CSDN学霸课表——系统集成项目管理工程师(软考中级)
- 第 6 章 数据存储
- 代码设置文字大小sp
- zoj Modular Inverse
- 小数的处理
- C++实验3——个人所得税计算器
- Valid Palindrome问题及解法
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-3结合caffe中的CIFAR10修改相关配置文件并训练
- PAT
- C++作业2:个人所得税的计算,本月有几天,定期存款利息计算器