Android数据存储与共享

来源:互联网 发布:数据库的事务是什么 编辑:程序博客网 时间:2024/06/05 11:47
1、简单数据存储---Preferences
    SharedPreferences sp = this.getSharedPreferences("cundang", Context.MODE_PRIVATE);// 路径名 /data/data/应用程序包名/shared_prefs/cundang.xml
    String lastLoginTime = sp.getString("lastLoginTime", null);
    if(null == lastLoginTime){
        lastLoginTime = "感谢使用本软件";
    }else{
        lastLoginTime = "欢迎回来!上次进入时间为:"+lastLoginTime;
    }
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("lastLoginTime", new Date().toLocaleString());
    editor.commit();
        
    MyDialog.newInstance("欢迎", lastLoginTime).show(getFragmentManager(), "");

2、Android自带开源数据库---SQLite
    //创建数据库 openDatabase(String path,
                       SQLiteDatabase.CursorFactory factory,
int flags)

    SQLiteDatabase sld=SQLiteDatabase.openDatabase("/data/data/com.example.practice/mydb",
null,// 游标工厂,默认 null
SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.CREATE_IF_NECESSARY // 模式为读写,不存在则创建数据库)

String sql = "创建表";    
    sld.execSQL(sql);

    //关闭数据库 close()

sld.close();

//插入数据 insert(String table,String nullColumnHack, ContentValues values)

String sql = "插入数据";    
    sld.execSQL(sql);

//更新数据 update(String table, ContentValues values, String whereClause, String[] whereArgs)

//删除数据 delete(String table, String whereClause, String [] whereArgs)

//查询数据 query(String table, String[] columns, String selection, String[] selectionArgs,String groupBy,String having,String orderBy)


//执行SQL(除了select) execSQL(String sql) 或 execSQL(String sql, Object[] bindArgs)

//执行查询SQL(select)  rawQuery(String sql, String[] selectionArgs)

String sql = "select ...";
Cursor cur = sld.rawQuery(sql, new String[] {"","",...});

while(cur.moveToNext(){
String diyilie = cur.getString(0);// 获取第一列数据
int dierlie = cur.getInt(1);// 获取第二列数据
}
cur.close();


3、使用ContentProvider共享数据
3.1共享数据
public class MyContentProvider extends ContentProvider{
private static final UriMatcher um;
static {
um = new UriMatcher(UriMatcher.NO_MATCH);
um.addURI("lwr.practice.database.test", "test1", 1);
}
SQLiteDatabase sld;


@SuppressLint("SdCardPath") @Override
public boolean onCreate() {
// TODO Auto-generated method stub
sld = SQLiteDatabase.openDatabase(
"/data/data/lwr.playenglish.database.test/test", null,// 游标工厂,默认 null
SQLiteDatabase.OPEN_READWRITE
| SQLiteDatabase.CREATE_IF_NECESSARY // 模式为读写,不存在则创建数据库
);
return false;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
switch (um.match(uri)) {
case 1:
Cursor cur = sld.query("test", projection, selection,
selectionArgs, null, null, sortOrder);
return cur;
}


return null;
}
}
3.2获取共享数据
        public class example1 extends Activity{

...  onCreate(...){
    ContentResolver cr = this.getContentResolver();
 
Cursor cur=cr.query(Uri.parse("content://lwr.practice.database.test/test1"),
new String[] {"id","name",...""},
"id=?",
new String[] {"12"},
"sage ASC"
);
while(cur.moveToNext()){
     int id = cur.getInt(0);
 String name = cur.getString(1);
}
cur.close();
  }

}