Android的五种数据存储方式
文件存储SharedPreferencesSQLite数据库存储ContentProvider网络存储默认存储路径:/data/data/<PackageName>/files文件操作模式:MODE_PRIVATE(默认):覆盖、MODE_APPEND:追加
写入文件 public void save(){ String data = "save something here"; FileOutputStream out = null; ButteredWriter writer = null; try{ out = openFileOutput("data",Context.MODE_PRIVATE); writer = new ButteredWriter(new OutputSreamWriter(out)); writer.write(data); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(writer!=null){ writer.close(); } }catch(IOException e){ e.printStackTrace(); } } 读取数据 public String load(){ FileInputStream in = null; ButteredReader reader = null; StringBuilder builder = new StringBuilder(); try{ in = openFileInput("data"); reader = new ButteredReader(new InputStreamReader(in)); String line= ""; while((line = reader.readline()) != null){ builder.append(); } }catch(IOException e){ e.printStackTrace(); }finally{ if(reader != null){ try{ reader.close(); }catch(IOException e){ e.printStackTrace(); } } } }默认存储路径:/data/data/<PackageName>/shared_prefs操作模式:MODE_PRIVATE(默认):只有当前的应用程序才能对文件进行读写、MODE_MULTI_PROCESS:用于多个进程对同一个SharedPreferences进行读写。存储数据格式:键值对
默认存储路径:/data/data/<PackageName>/databases数据类型
integer 整型real 浮点型text 文本类型blob 二进制类型 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 context; public MyDatabaseHelper (Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); this.context = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); } //当打开数据库时传入的版本号与当前的版本号不同时会调用该方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }在MainActivity中
MyDatabaseHelper helper = new MyDatabaseHelper(this,"BookStore.db",null,1); //检测到没有BookStore这个数据库,会创建该数据库并调用MyDatabaseHelper中的onCreated方法。 helper.getWritableDatabase();在MainActivity中只需将version改为大于原来版本号即可。
MyDatabaseHelper helper = new MyDatabaseHelper(this,"BookStore.db",null,2); helper.getWritableDatabase();insert()方法,参数一表名,参数二是在未指定添加数据的情况下给某些可为空的列自动赋值为NULL,设置为null即可,参数三是ContentValues对象。MainActivity
SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name","The Book Name"); values.put("author","chen"); values.put("pages",100); values.put("price",200); db.insert("Book",null,values);update()方法,参数一是表名,参数二是ContentValues对象,参数三、四是去约束更新某一行或某几行的数据,不指定默认更新所有。MainActivity
SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("price",120); db.update("Book",values,"name= ?",new String[]{"The Book Name"});delete()方法,参数一是表名,参数二、三是去约束删除某一行或某几行的数据,不指定默认删除所有。MainActivity
SQLiteDatabase db = helper.getWritableDatabase(); db.delete("Book","pages> ?",new String[]{"100"});query()方法,参数一是表名,参数二是指定查询哪几列,默认全部,参数三、四是去约束查询某一行或某几行的数据,不指定默认查询所有,参数五是用于指定需要去group by的列,参数六是对group by的数据进一步的过滤,参数七是查询结果的排序方式MainActivity
SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("Book",null,null,null,null,null,null); if(cursor.moveToFirst()){ do{ String name = cursor.getString(cursor.getColumnIndex("name"); String author = cursor.getString(cursor.getColumnIndex("author"); int pages = cursor.getString(cursor.getColumnIndex("pages"); double price = cursor.getString(cursor.getColumnIndex("price"); }while(cursor.moveToNext()); } cursor.close():ContentProvider主要用于不同的程序之间实现数据共享的功能。
访问其他应用程序中的数据工具类ContentResolver,提供了一系列方法对数据进行CRUD操作。
1、内容URI内容URI是由权限和路径组成的,权限是用于区分不同的应用程序,一般是以包名来命名。路径是用于区分同一个应用程序的不同表。
//包名为com.example.app的表table1访问路径 Uri uri = Uri.parse("content://com.example.app.provider/table1");2、使用Uri对象进行数据操作
查询 Cursor cursor = getContentResolver().query(uri,null,null,null,null); if(cursor != null){ while(cursor.moveToNext()){ String column1 = cursor.getString(cursor.getColumnIndex("column1")); String column2 = cursor.getString(cursor.getColumnIndex("column2")); } cursor.close(); } 插入 ContentValues values = new ContentValues(); values.put("column1","text"); values.put("column2",1); getContentResolver().insert(uri,values);