当前位置: 代码迷 >> SQL >> android学习札记之十一数据存储(Shared Preferences、SQLite)
  详细解决方案

android学习札记之十一数据存储(Shared Preferences、SQLite)

热度:64   发布时间:2016-05-05 13:31:42.0
android学习笔记之十一数据存储(Shared Preferences、SQLite)

android数据的存储方式可以用标准的j2se的api文件存储和网络存储方式.以下是android的其他两种存储方式

1,Shared Preferences是一个简单键值对的xml格式的存储方式
???? a,读取
??????? getPreferences (int mode) 返回SharedPreferences实例
?mode Activity.MODE_PRIVATE, Activity.MODE_WORLD_READABLE, Activity.MODE_WORLD_WRITEABLE
???????
?getString (String key, String defValue) 获取数据
???? b,写数据
?????? 通过SharedPreferences(必须为MODE_PRIVATE或MODE_WORLD_WRITEABLE)实例的edit()返回Editor对象
?????? Editor.putString (String key, String value) 设置值
?????? Editor.commit() 提交保存
?????? Editor.clear()? 清除所有数据
?????? Editor.remove (String key) 移除某一值

?

2,SQLite
??? a,SQLiteDatabase类
???? 1),打开/关闭数据库
?????? openOrCreateDatabase(String name, int mode, CursorFactory factory)返回SQLiteDatabase实例 //数据库不存在则新建一个
?????? mode Context.MODE_PRIVATE, Context.MODE_WORLD_READABLE, Context.MODE_WORLD_WRITEABLE, Context.MODE_PRIVATE

?????? SQLiteDatabase类.close()关闭数据库
???? 2),执行数据库操作
?????? SQLiteDatabase.execSQL (String sql) //执行Sql语句
?
?????? long insert (String table, String nullColumnHack, ContentValues values)
?????? int update (String table, ContentValues values, String whereClause, String[] whereArgs)
?????? int delete (String table, String whereClause, String[] whereArgs)
?????? 其中ContentValues是一个键值对,通过ContentValues.put方法设置列名和列值

?????? Cursor rawQuery (String sql, String[] selectionArgs) //执行的是语句
?????? Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
?????? Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
?????? Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,
????????????? String orderBy, String limit)
?????? 其中:
??? columns 显示列
??? selection 条件where部分
??? selectionArgs ?替换符号.如selection为name =? and age=?那么selectionArgs可以为 new? String[]{"abc","20"}
??????
?????? Cursor类
???????? int getCount() 返回记录数
? boolean isClosed () 判断关闭
? boolean isFirst ()
? boolean isLast ()

? boolean moveToFirst ()
? boolean moveToLast ()
? boolean moveToNext ()
? boolean moveToPosition (int position)
? boolean moveToPrevious ()

? boolean isNull (int columnIndex) 判断是否为空
? XXX getXXX(int columnIndex) 读取某一列的数据

???? 3),事务
?????? SQLiteDatabase.beginTransaction()??//打开
?????? SQLiteDatabase.setTransactionSuccessful()?//提交
?????? SQLiteDatabase.endTransaction()???//结束

??? b,SQLiteOpenHelper
????? 通过该继承该类可以获取到数据库创建/打开/升级等信息
????? 须实现的方法
????? onCreate(SQLiteDatabase db)?????//数据库被创建时触发
????? onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)????? //升级数据库

????? 其他重写
????? onOpen(SQLiteDatabase db) 书库打开是触发

????? 方法
???????? SQLiteDatabase getReadableDatabase ()
? synchronized SQLiteDatabase getWritableDatabase ()

无论是Shared Preferences还是SQLite都是程序私有的其他程序无法直接访问.要想访问其他程序的数据须实现Content Provider.

  相关解决方案