android 数据存储技术
1.私有数据存储xml形式(SharedPreferences)
SharedPreferences settins = getSharedPreferences("文件名",0) //获取一个SharedPreferences对象
读取数据:
String name = settings.get("KEY","");?
写入/更新数据
settings.edit().putString("KEY","VALUE").commit();?
数据保存位置:
在DDMS中的File Explorer中的展开到/data/data/<package name>/shared_prefs下<文件名>.xml?
2.文件存储
String FILE_NAME = "tempfile.tmp";
FileOutputStream fos = openFileOutput(FILE_NAME , Context.MODE_PRIVATE);//初始化
Context.MODE_PRIVATE:写入的时候覆盖原有的内容。
Context.MODE_APPEND:写入的时候在原有的内容后面添加内容。
FileInputStream fis = openFileInput(FILE_NAME);//创建写入流
其他资源文件的使用:
例如mp3
资源文件放在/res/raw下
使用时:
Resources myResources = getResources();?
InputStream myFile = myResources.openRawResource(R.raw.myfilename);?
3.数据库的运用
定义SQLiteOpenHelper 并完成 创建 更新 功能?
public?class?DBHelper?extends?SQLiteOpenHelper?{???
???????
????public?static?final?String?TB_NAME?=?"mycountry";???
????public?static?final?String?ID?=?"_id";???
????public?static?final?String?COUNTRY?=?"country";???
????public?static?final?String?CODE?=?"code";???
???????
??????//数据库对象构造函数?
????public?DBHelper(Context?context,?String?name,????
????????????CursorFactory?factory,int?version)?{???
????????super(context,?name,?factory,?version);???
????}???
??? //数据库创建函数?
????public?void?onCreate(SQLiteDatabase?db)?{???
???????????
????????db.execSQL("CREATE?TABLE?IF?NOT?EXISTS?"????
????????????????+?TB_NAME?+?"?("????
????????????????+?ID?+?"?INTEGER?PRIMARY?KEY,"????
????????????????+?COUNTRY?+?"?VARCHAR,"???
????????????????+?CODE?+?"?INTEGER)");???
????}??
??? //数据库升级时候调用函数?
????public?void?onUpgrade(SQLiteDatabase?db,????
????????????int?oldVersion,?int?newVersion)?{???
???????????
????????db.execSQL("DROP?TABLE?IF?EXISTS?"+TB_NAME);???
????????onCreate(db);???
????}???
}?
从SQLiteOpenHelper 得到SQLiteDatabase的实例?
DBHelper?helper?=?new?DBHelper(this,?DB_NAME,?null,?VERSION);???
//得到一个可写的数据库对象?
SQLiteDatabase?db?=?helper.getWritableDatabase();???
//得到一个可读的数据库对象?
SQLiteDatabase?db?=?helper.getReadableDatabase();???
SQLiteDatabase 的一些操作:
插入数据:
ContentValues?values?=?new?ContentValues();???
????????values.put(DBHelper.COUNTRY,?"中国");???
????????values.put(DBHelper.CODE,?86);???
????????db.insert(DBHelper.TB_NAME,DBHelper.ID,?values);?
改动数据
1. db.insert(DBHelper.TB_NAME,DBHelper.ID,null);???
2. ????????values.clear();???
3. ????????values.put(DBHelper.COUNTRY,?"意大利");???
4. ????????values.put(DBHelper.CODE,?39);???
5. ????????db.update(DBHelper.TB_NAME,?values,DBHelper.ID?+?"?=?2",null);???
execSQL 执行SQL语言
1. db.execSQL("INSERT?INTO?"??
2. ????????????????+?DBHelper.TB_NAME?+?"("??
3. ????????????????+?DBHelper.COUNTRY?+?","??
4. ????????????????+?DBHelper.CODE?+?")?VALUES?"??
5. ????????????????+?"('洪都拉斯',504)");??
查询数据
1. Cursor?c?=?db.query(DBHelper.TB_NAME,null,null,null,null,null,??
2. ????????????????DBHelper.CODE+"?DESC");??
第一个参数为表名,?
第二个字段是我们想要返回数据包含的列的信息,字符串数组形式?
第三个参数是selection?
第四个是selectionArgs?
第五个是groupBy?
第六个是having?
第七个是orderBy?
删除数据
1. db.delete(DBHelper.TB_NAME,null,null);??
第一个参数是表名
第二个是selection
第三个是selectionArgs
如果存在这个表,就删除表
DROP TABLE IF EXISTS 表名
SimpleCursorAdapter notes = new SimpleCursorAdapter(this,R,layout.listview,myCursor,from,to)
第一个参数是context
第二个是ListView中每一项的布局
第三个是cursor
第四个是cursor列名
第五个是ListView中的组件ID
listview.setListAdapter(notes);
4.程序间数据共享ContentProvider Content provider?
package com.eoeAndroid.contentProvider;
import java.util.Calendar;
import java.util.HashMap;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;?
import android.content.UriMatcher;?
import android.content.res.Resources;?
import android.database.Cursor;?
import android.database.SQLException;?
import android.database.sqlite.SQLiteDatabase;?
import android.database.sqlite.SQLiteOpenHelper;?
import android.database.sqlite.SQLiteQueryBuilder;?
import android.net.Uri;?
import android.text.TextUtils;?
import android.util.Log;?
import com.eoeAndroid.contentProvider.Diary.DiaryColumns;?
public class DiaryContentProvider extends ContentProvider {?
private static final String DATABASE_NAME = "database";
private static final int DATABASE_VERSION = 3;
private static final String DIARY_TABLE_NAME = "diary";
private static final int DIARIES = 1;
private static final int DIARY_ID = 2;
private static final UriMatcher sUriMatcher;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);?
Log.i("jinyan", "DATABASE_VERSION=" + DATABASE_VERSION);?
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("jinyan", "onCreate(SQLiteDatabase db)");
String sql = "CREATE TABLE " + DIARY_TABLE_NAME + " ("
+ DiaryColumns._ID + " INTEGER PRIMARY KEY,"?
+ DiaryColumns.TITLE + " TEXT," + DiaryColumns.BODY?
+ " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";?
//
sql ="CREATE TABLE " + DIARY_TABLE_NAME + " ("
+ DiaryColumns._ID + " INTEGER PRIMARY KEY,"
+ DiaryColumns.TITLE + " varchar(255)," + DiaryColumns.BODY
+ " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
//
Log.i("jinyan", "sql="+sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("jinyan",
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)=
+ newVersion);?
db.execSQL("DROP TABLE IF EXISTS diary");
onCreate(db);
}
}
private DatabaseHelper mOpenHelper;
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(Diary.AUTHORITY, "diaries", DIARIES);
sUriMatcher.addURI(Diary.AUTHORITY, "diaries/#", DIARY_ID);
}
@Override
public boolean onCreate() {
mOpenHelper = new DatabaseHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {?
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
switch (sUriMatcher.match(uri)) {
case DIARIES:
qb.setTables(DIARY_TABLE_NAME);
break;
case DIARY_ID:
qb.setTables(DIARY_TABLE_NAME);
qb.appendWhere(DiaryColumns._ID + "="
+ uri.getPathSegments().get(1));?
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
String orderBy;
if (TextUtils.isEmpty(sortOrder)) {
orderBy = Diary.DiaryColumns.DEFAULT_SORT_ORDER;
} else {
orderBy = sortOrder;
}
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null,
null, orderBy);?
return c;
}
@Override
public String getType(Uri uri) {
switch (sUriMatcher.match(uri)) {
case DIARIES:
return DiaryColumns.CONTENT_TYPE;
case DIARY_ID:
return DiaryColumns.CONTENT_ITEM_TYPE;?
default:
throw new IllegalArgumentException("Unknown URI " + uri);?
}
}
@Override
public Uri insert(Uri uri, ContentValues initialValues) {
if (sUriMatcher.match(uri) != DIARIES) {
throw new IllegalArgumentException("Unknown URI " + uri);?
}
ContentValues values;
if (initialValues != null) {
values = new ContentValues(initialValues);
} else {
values = new ContentValues();
}
if (values.containsKey(Diary.DiaryColumns.CREATED) == false) {
values.put(Diary.DiaryColumns.CREATED, getFormateCreatedDate());
}
if (values.containsKey(Diary.DiaryColumns.TITLE) == false) {
Resources r = Resources.getSystem();
values.put(Diary.DiaryColumns.TITLE, r
.getString(android.R.string.untitled));?
}
if (values.containsKey(Diary.DiaryColumns.BODY) == false) {
values.put(Diary.DiaryColumns.BODY, "");
}
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
long rowId = db.insert(DIARY_TABLE_NAME, DiaryColumns.BODY, values);
if (rowId > 0) {
Uri diaryUri = ContentUris.withAppendedId(
Diary.DiaryColumns.CONTENT_URI, rowId);?
return diaryUri;
}
throw new SQLException("Failed to insert row into " + uri);
}
@Override
public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String rowId = uri.getPathSegments().get(1);
return db
.delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null);?
}
@Override
public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String rowId = uri.getPathSegments().get(1);
return db.update(DIARY_TABLE_NAME, values, DiaryColumns._ID + "="
+ rowId, null);?
}
public static String getFormateCreatedDate() {
Calendar calendar = Calendar.getInstance();
String created = calendar.get(Calendar.YEAR) + "年"
+ calendar.get(Calendar.MONTH) + "月"?
+ calendar.get(Calendar.DAY_OF_MONTH) + "日"?
+ calendar.get(Calendar.HOUR_OF_DAY) + "时"?
+ calendar.get(Calendar.MINUTE) + "分";?
return created;
}
}
package com.eoeAndroid.contentProvider;
import android.net.Uri;?
import android.provider.BaseColumns;?
public final class Diary {?
??? public static final String AUTHORITY = "com.ex09_2_contentprovider.diarycontentprovider";?
??? private Diary() {}?
????
??? /**?
???? * Notes table?
???? */?
??? public static final class DiaryColumns implements BaseColumns {?
??????? // This class cannot be instantiated?
??????? private DiaryColumns() {}?
??????? public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/diaries");?
??????? public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.diary";?
??????? public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.diary";?
??????? public static final String DEFAULT_SORT_ORDER = "created DESC";?
??????? public static final String TITLE = "title";?
??????? public static final String BODY = "body";?
??????? public static final String CREATED = "created";?
?????
??? }?
}?
