本人专职是iOS开发,利用业余时间刚开始学习Android开发,学习资料就是郭霖大神的《第一行代码》,这篇文章算是读书笔记,分享出来一是帮助自己记忆,二是可以方便别人查阅,希望各位大佬不吝赐教!
1、文件存储
文件存储不会对存储的数据进行任何的格式化处理,所有数据都是原封不动的保存到文件中,适合存储一些简单的文本数据或二进制数据。
Ⅰ文件写入
openFileOutput()
/** * 写入数据 */ private void writeData(String text){ FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("test", MODE_PRIVATE); // 两个参数:参数1是文件保存的文件名,参数2是保存模式,MODE_PRIVATE是如果文件已存在则替换,MODE_APPEND是文件已存在就在原文件拼接新数据 writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(text); } catch (IOException e){ e.printStackTrace(); } finally { try { if (writer != null)writer.close(); } catch (IOException e){ e.printStackTrace(); } } }
Ⅱ文件读取
openFileInput()
/** * 读取数据 */ private String readData(String fileName){ if (fileName.isEmpty()) return null; FileInputStream input = null; BufferedReader reader = null; StringBuilder stringBuilder = new StringBuilder(); try { input = openFileInput(fileName); reader = new BufferedReader(new InputStreamReader(input)); String line = ""; while ((line = reader.readLine()) != null){ stringBuilder.append(line); } } catch (IOException e){ e.printStackTrace(); } finally { try { if (reader != null) reader.close(); } catch (IOException e){ e.printStackTrace(); } } return stringBuilder.toString(); }
2、sharedPreferences存储
使用键值对存储数据,支持多种不同的数据类型存储,读取和写入数据格式不变。
sharedPreferences存储首先要获取SharedPreferences实例对象,根据所在的不同的类有不同的获取方法,如下:
/** * Context类中获取 * * parmas name: 传入文件名,如果文件名不存在就新建一个该名文件; * parmas model: 传入操作模式,目前只有MODE_PRIVATE这种模式可用,也是默认模式; */ getSharedPreferences("login", MODE_PRIVATE);/** * Activity类中获取,文件名默认为Activity类名 * * parmas model: 传入操作模式,默认模式; */ getPreferences(MODE_PRIVATE);/** * PreferenceManager类中获取,默认使用应用程序包名作为文件名前缀 * * parmas context: 传入所在上下文; */ PreferenceManager.getDefaultSharedPreferences(this);
Ⅰ存储数据
/** * 存储数据 */ private void saveData(){ // 获取SharedPreferences实例 SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE); // 获取Editor实例 SharedPreferences.Editor editor = preferences.edit(); // 获取数据 String account = accountET.getText().toString(); String password = passwordET.getText().toString(); // 通过键值添加数据 editor.putString("account", account); editor.putString("password", password); editor.putBoolean("isRemmber", true); // 提交数据 editor.apply(); }
Ⅱ读取数据
/** * 读取数据 */ private void readData(){ // 获取SharedPreferences实例 SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE); // 读取数据 String account = preferences.getString("account", ""); String password = preferences.getString("password", ""); Boolean isRemmber = preferences.getBoolean("isRemmber",false); // 控件赋值 accountET.setText(account); passwordET.setText(password); remmberCB.setChecked(isRemmber); }
Ⅲ清空数据
/** * 清空数据 */ private void clearData(){ // 获取SharedPreferences实例 SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE); // 获取Editor实例 SharedPreferences.Editor editor = preferences.edit(); // 清空数据 editor.clear(); }
Tips:如果使用SharedPreferences直接保存用户名、密码等重要数据是不靠谱的,至少得将这些数据按照一定规则加密之后再保存到文件中!
3、SQLite存储
可用于存储大量的复杂的关系型数据,
Ⅰ创建数据库
新建一个MyDataBaseHelper类继承自SQLiteOpenHelper,并重写onCreate和onUpgrade方法,调用MyDataBaseHelper类的构造函数即可创建一个dbHelper,通过getWritableDatabase方法就可以获取到数据库
/** * 创建数据库 * * parmas context:上下文 * parmas name:数据库名称 * parmas factory:允许在查询数据时返回一个自定义的Cursor,一般传null * parmas version:数据库版本 * return dbHelper:返回一个dbHelper实例对象,调用getWritableDatabase()方法就可以获取到数据库 */ MyDataBaseHelper dbHelper = new MyDataBaseHelper(this, "DataCache.db", null, 2); SQLiteDatabase db = dbHelper.getWritableDatabase();
Ⅱ更新数据库
直接调用创建数据库方法,传一个不同的数据库版本号会自动调MyDataBaseHelper类中的onUpgrade方法,在方法内更新数据库操作即可
/** * 更新数据库 */ MyDataBaseHelper dbHelper = new MyDataBaseHelper(this, "DataCache.db", null, 2);
Ⅲ创建表
/** * 创建表 * * 1、获取可操作数据库 * 2、调用execSQL方法执行SQL语句删除表 */ SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("create table Book (id integer primary key autoincrement, author text, price real, pages integer, name text)");
Ⅳ删除表
/** * 删除表 * * 1、获取可操作数据库 * 2、调用execSQL方法执行SQL语句删除表 */ SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("drop table if exists Book");
Ⅴ插入数据
/** * 插入数据 * * parmas table:要插入的表名 * parmas nullColumnHack:空值自动赋值null,一般用不到直接传null就行 * parmas factory:允许在查询数据时返回一个自定义的Cursor,一般传null * parmas values:要插入的数据实例对象 */ ContentValues values = new ContentValues(); values.put("author", "Lee"); values.put("price", 9.98); values.put("pages", 496); values.put("name", "How are you"); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.insert("Book", null, values);
Ⅵ更新数据
/** * 更新数据 * * parmas table:要插入的表名 * parmas values:要更新的数据实例对象 * parmas whereClause:SQL查询条件 * parmas whereArgs:查询条件参数数组,依然顺序从数据取值赋给前面查询条件中的?占位符 */ ContentValues updateValue = new ContentValues(); updateValue.put("price", 10.99); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.update("Book", updateValue, "name=?", new String[]{"How are you"});
Ⅶ删除数据
/** * 删除数据 * * parmas table:指定删除数据的表名 * parmas whereClause:指定查询条件 * parmas whereArgs:为查询条件的占位符提供具体值 */ SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("Book", "pages > ?",new String[]{"500"});
Ⅷ查询数据
/** * 查询数据 * * parmas table:指定查询的表名 * parmas columns:指定查询的列名 * parmas section:指定查询条件 * parmas sectionArgs:为查询条件的占位符提供具体值 * parmas groupBy:指定需要groupBy的列 * parmas having:对groupBy的结果进一步约束 * parmas orderBy:指定查询结果的排序方式 * return cursor:返回一个可操作的cursor对象,操作cursor对象即可获取具体数据 */ SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("Book",null, null, null, null, null, null);
作者:木头Lee
链接:https://www.jianshu.com/p/911c0ac1871a
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦