`
kevin2562
  • 浏览: 118768 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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";


    
    }
}
分享到:
评论

相关推荐

    Android 数据存储技术

    本文将深入探讨Android的数据存储技术,包括几种主要的存储方式及其应用场景。 首先,我们有共享首选项(SharedPreferences)。SharedPreferences提供了一个轻量级的存储机制,用于保存键值对数据,通常为简单的...

    Android实现数据存储技术

    Android 实现数据存储技术 Android 平台中实现数据存储的五种方式分别是:使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据和网络存储数据。 使用 ...

    android 数据存储技术 详解

    本文将详细介绍Android中的四种主要数据存储技术:SharedPreferences、文件存储、SQLite数据库以及ContentProvider,并通过源码实例来深入理解它们的工作原理。 1. **SharedPreferences** SharedPreferences是一种...

    Java(Android开发):Android数据存储技术全解析

    内容概要:本文详细介绍了Android应用中常用的数据存储技术,包括文件存储、SharedPreferences、SQLite数据库、ContentProvider和网络存储等。每种技术都涵盖了原理、示例代码及其适用场景,旨在帮助开发者根据具体...

    Android应用源码之数据存储.zip

    在Android应用开发中,数据存储是一项至关重要的任务,它涉及...总之,这份"Android应用源码之数据存储.zip"是一个宝贵的教育资源,可以帮助开发者提升Android数据存储技术,为构建高效、稳定的应用程序打下坚实基础。

    android 数据存储的几种方式

    在Android平台上,数据存储有多种方式,主要分为文件、数据库和网络这三大类。每种方式都有其适用的场景和特点。以下将详细介绍这几种存储方式,并针对Android平台的特定实现进行讨论。 1. SharedPreferences ...

    Android数据存储与访问

    在Android开发中,数据存储与访问是...开发者应根据应用的特性和性能需求,灵活运用这些数据存储技术,为用户提供高效且可靠的体验。在第8章《数据存储与访问》中,我们将进一步探讨这些主题,并通过实例代码加深理解。

    Android学习之数据存储.7z

    在Android应用开发中,数据存储是一项至关重要的任务,它涉及到应用程序如何持久化用户数据、配置信息以及各种状态。...通过深入学习和实践,你可以更好地掌握Android数据存储技术,提升应用的开发能力。

    android数据存储集锦源码

    在“android数据存储集锦源码”中,你可以找到这些技术的实现代码,通过实际运行和调试,加深理解它们的工作原理和用法。这将有助于提升你的Android开发能力,特别是在处理数据持久化方面。记得在学习过程中,结合...

    学习之数据存储.zip

    在“学习之数据存储.zip”压缩包中,我们可能找到一系列关于Android数据存储技术的资源,这些资料对于进行毕业设计、代码学习以及JAVA ANDROID相关的项目尤为有用。 1. **Shared Preferences**: 这是Android中最...

    应用源码之26.数据存储(5).zip

    数据存储(5).zip"聚焦于Android数据存储技术的实践应用,通过源码学习的方式深入探讨这一主题。下面我们将围绕Android的数据存储方式展开讨论。 1. **Shared Preferences**:这是Android中最简单的数据存储方式,...

    Android数据存储和数据库编程

    在Android应用开发中,数据存储和数据库编程是...总之,理解并熟练运用Android的数据存储和数据库编程技术,对于开发高质量、用户友好的应用程序至关重要。开发者需要不断实践和探索,以适应不同场景下的数据管理需求。

    Android实验6:数据存储和访问

    分别使用sqlite3工具和Android代码的方式建立SQLite数据库。在数据库建立完成后,编程实现基本的数据库添加和删除功能。创建一个学生管理的APP,基本信息包含学生姓名,班级,学号。采用数据库存储这些信息。应用...

    android 数据存储之 Network

    通过上述各种数据存储技术的结合使用,Android开发者可以构建出高效、健壮的网络数据存储解决方案,适应不同场景的需求。在实际项目中,根据数据类型、大小、使用频率和用户需求,选择合适的方法进行数据存储至关...

    android 浏览器 数据存储

    在Android平台上,数据存储是应用程序持久化数据的关键技术。Android提供了多种存储机制,包括SQLite数据库、SharedPreferences、文件系统以及ContentProvider。本篇文章将主要聚焦于SQLite数据库在Android浏览器中...

    Android手机App程序中SQLite数据存储应用.pdf

    "Android 手机 App 程序中 SQLite 数据存储应用" Android 手机 App 程序中 SQLite 数据存储应用是 Android 手机 App 程序开发中的一个重要组成部分。随着 IT 行业的高速发展,移动通信技术的更新速度日新月异。...

    Android课程试验报告-实现数据库存储.docx

    在Android应用开发中,数据库是存储和管理数据的重要组成部分。本实验报告主要涉及如何在Android平台上实现基于SQLite的数据库存储。SQLite是一个轻量级的关系型数据库,它被广泛用于移动设备,因为它不需要单独的...

    Android数据储存

    总结,Android数据存储涉及多种技术和策略,根据应用场景选择合适的方法,合理利用内存缓存和文件缓存,可以显著提升应用性能,减少网络开销。在处理非图片数据时,序列化和缓存技术尤其关键,它们帮助我们高效地...

    Android开发与实践 pdf

    图像与动画处理技术,利用OpenGL实现3D图形,多媒体应用开发,Android数据存储技术,Content Provider实现数据共享,线程与消息处理,Service应用,网络通信技术,综合案例—家庭理财通,课程设计—猜猜鸡蛋放在哪只...

Global site tag (gtag.js) - Google Analytics