将数据存储到文件中
Context有方法openFileOutput将数据存储到文件中,openFileOutput指定两个参数,第一个参数是文件名,第二个参数是模式。文件默认存储在/data/data/<packagename>/files
下,模式有两种,一种是MODE_PRIVATE,相同文件名会覆盖,一种是MODE_APPEND,相同文件名会追加内容。它返回的是一个人FileOutputStream对象,然后使用FileOutputStream构建出OutputStreamWriter对象,然后使用OutputStreamWriter构建出BufferedWriter, 从而完成writer操作。
从文件中读取数据
通过openFileInput方法获得输入流,根据输入流构建reader,通过reader构建出String返回
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();
}
}
}
通过SharedPreference存储
SharedPreference是通过键值对的方式来存储的
SQLite
Android提供了一个抽象类SQLiteOpenHelper,需要实现两个抽象方法,onCreate和onUpdate。
SQLiteOpenHelper有两个重要的实例方法:getReadableDatabase和getWritableDatabase,在数据不可写的时候,getReadableDatabase将以只读方式打开,getWritableDatabase将抛出错误。SQLiteOpenHelper的构造函数,有四个参数,第一个context提供上下文,第二个是数据库的名称,第三个是自定义游标,第四个是数据库的版本号。当输入的版本号比原先大的时候就会先调用onUpgrade方法,然后再调用onCreate方法。这样就实现了升级数据库。
数据库添加数据
SQLiteDatabase对象提供了insert方法,需要传入3个参数,第一个参数指定要插入的表,第二个参数表示给可以为空的列赋值为null,第三个是一个ContentValue对,提供一系列put的重载。
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","The Da Vinci Code");
values.put("author","Dan Brown");
values.put("pages",454);
values.put("price",16.96);
db.insert("Book",null,values);
直接使用Sql语句
增删改都是用db.execSQL()
查询使用db.rawQuery()
使用LitePal
LitePal是一种开源框架,用于简化SQLite操作
第一步:引用依赖,在build.gradle中引用
compile 'org.litepal.android:core:1.3.2
第二步:配置litepal.xml文件
指定数据库名称和版本
<?xml version="1.0" encoding="UTF-8" ?>
<literpal>
<dbname value="BookStore"></dbname>
<version value="1"></version>
<list>
</list>
</literpal>
第三步:在androidmanifest.xml的application标签对中引入:
android:name="org.litepal.LitePalApplication"
第四步:定义一个实体类,把它映射到litepal.xml的映射模型列表中
第五步:在MainActivity中通过 Connector.getDatabase();
得到数据库。
使用LitePal升级数据库
对数据库结构的改变,直接将版本号+1就可以了。
使用LitePal添加数据
实体类继承DataSupport,在活动中调用实体类的set方法,然后使用save方法就可以了。
使用LitePal更新数据
使用updateAll方法,找到要更新的语句,然后修改价格和出版商。如果updateAll方法中没有数据,那么就会对所有语句生效。
Book book = new Book();
book.setPrice(14.95);
book.setPress("Anchor");
book.updateAll("name = ? and author = ?","The Lost" +
"Symbol","Dan Brown");
使用LitePal删除数据
第一种:使用的查询API查询出来的记录都能用delete直接删除。
第二种:使用delteAll()第一个参数指定要删除的记录所在的表,第二个参数指定条件,第三个参数指定具体的数值。DataSupport.deleteAll(Book.class,"price<?","15");
使用LitePal查询数据
查询表中的所有数据:List<Book> books= DataSupport.findAll(Book.class)
指定查询某几列的数据:List<Book> books = DataSupport.select("name","price").find(Books.class);
等等。