☆ Android中一共提供了4中存储方式,但是存储的这些数据都是其应用程序私有的,所以如果需要在其他程序中使用这些数据,需要Android提供的Content Providers(数据共享)。
Android存储方式分别如下:
1.Shared Preferences:用来存储“key-value paires”格式的数据,一个轻量级的键值存储机制,只可以存储基本数据类型。
Shared Preferences 使用方法:通过getPreferences()方法来获得Preferences对象,通过"SharedPreferences.Editor deitor = uiState.edit()"取得编辑对象。通过"editor.put...()"方法
添加数据,最后通过commint()方法来保存这些数据。如果不需要与其它模块共享数据,通过使用Activity.getPreferences()方法来保存数据为私有。
代码如下:
//读取数据
/* 装载数据 */
// 取得活动的preferences对象.
SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);

// 取得值.
mbMusic = settings.getBoolean("bmusic", false);

//存储数据
/* 这里我们在退出应用程序时保存数据 */
// 取得活动的preferences对象.
SharedPreferences uiState = getPreferences(0);

// 取得编辑对象
SharedPreferences.Editor editor = uiState.edit();

// 添加值
editor.putBoolean("bmusic", mbMusic);

// 提交保存
editor.commit();
Preferences存储数据的位置:在data/data目录下

2.Files:它通过FileInputStream和FileOuputStream对文件进行操作。但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。
使用方法:通过 openFileOutput方法来打开一个文件(如果该文件不存在则自动创建一个文件),通过load方法来获取文件中的数据。通过save方法来存储数据通过
deleteFile方法可以删除一个指定文件。
代码如下:
读取数据:
/* 装载、读取数据 */
void load()
{
/* 构建Properties对对象 */
Properties properties = new Properties();
try
{
/* 开发文件 */
FileInputStream stream = this.openFileInput("music.cfg");
/* 读取文件内容 */
properties.load(stream);
}
catch (FileNotFoundException e)
{
return;
}
catch (IOException e)
{
return;
}
/* 取得数据 */
mbMusic = Boolean.valueOf(properties.get("bmusic").toString());
}
存储数据:
/* 保存数据 */
boolean save()
{
Properties properties = new Properties();

/* 将数据打包成Properties */
properties.put("bmusic", String.valueOf(mbMusic));
try
{
FileOutputStream stream = this.openFileOutput("music.cfg", Context.MODE_WORLD_WRITEABLE);

/* 将打包好的数据写入文件中 */
properties.store(stream, "");
}
catch (FileNotFoundException e)
{
return false;
}
catch (IOException e)
{
return false;
}

return true;
}
如果我们使用了文件存储数据的方式,系统就会在和shared_prefs相同的目录中产生一个名为files的文件夹。


3.NetWork:通过网络来存储和获得数据。

4.SQLite:Android提供的一个标准的数据库,支持SQL语句。
用来处理数据量较大的数据。
△ SQLite特征:
1.轻量性
2.独立性
3.隔离性
4.跨平台性
5.多语言接口
6.安全性
△ SQLite数据库的一般操作包括:创建数据库、打开数据库、创建表、向表中添加数据、从表中删除数据、修改表中的数据、关闭数据库、删除指定表、删除数据库和
查询表中的某条数据。
1.创建和打开数据库:使用openOrCreateDatabase方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,如果不存在则创建一个数据库。
创建成功后返回一个SQLiteDatabase对象。
/* 数据库对象 */
private SQLiteDatabasemSQLiteDatabase= this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
2.创建表:要创建表可以通过execSQL方法来执行一条SQL语句。
/* 创建表的sql语句 */
private final static StringCREATE_TABLE= "CREATE TABLE " + TABLE_NAME + " (" + TABLE_ID + " INTEGER PRIMARY KEY," + TABLE_NUM + " INTERGER,"+ TABLE_DATA + " TEXT)";

// 获取数据库Phones的Cursor
try
{
/* 在数据库mSQLiteDatabase中创建一个表 */
mSQLiteDatabase.execSQL(CREATE_TABLE);
}
3.向表中添加一条数据:
可以使用insert方法来添加数据,但是insert方法要求把数据都打包到ContentValues中,ContentValues其实就是一个Map,Key值是字段名称,Value值是字段值。通过ContentValues的put方法就可以
把数据放到ContentValues对象中,然后插入到表中去。
/* 更新一条数据 */
public void UpData()
{
ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, 1);
cv.put(TABLE_DATA, "测试数据库数据" );
mSQLiteDatabase.insert(TABLE_NAME, null, cv );
同样可以通过execSQL 方法来执行一条"插入"的SQL语句,代码如下:String INSTERT_DATA = "INSERT INTO table1(_id,num,data) values(1,1,'通过SQL语句插入')";
mSQLiteDatabase.execSQL(INSERT_DATA);
}
4.从表中删除数据
mSQLiteDatabase.delete( "Examples_06_05.db", "WHERE _id="+0, null );
通过执行 execSQL 方法来执行SQL语句删除数据。
string DELETE_DATA = "DELETE FROM table1 WHERE _id=1";
mSQLiteDatabase.execSQL(DELETE_DATA);
5.修改表中的数据
ContentValues cv = new ContentValues();
cv.put("TABLE_NUM",3);
cv.put("TABLE_DATA","修改后的数据");
mSQLiteDatabase.update("table1",cv,"num"+"="+Integer.toString(0), null );
6.关闭数据库
关闭数据库很重要,也是大家经常容易忘记的。关闭的方法很简单,直接使用SQLiteDatabase的close方法。
mSQLiteDatabase.close();
7.删除指定表
mSQLiteDatabase.execSQL("DROP TABLE table1");
8.删除数据库
this.deleteDatabase("Examples_06_05.db");
9.查询表中的某条数据
Android中查询数据通过Cursor类来实现的。我们使用SQLiteDatabase.query()方法,会得到一个Cursor对象,Cursor指向的就是每一条数据。
代码如下:
/* 删除数据库 */
public void DeleteDataBase()
{
this.deleteDatabase(DATABASE_NAME);
this.finish();
}


/* 删除一个表 */
public void DeleteTable()
{
mSQLiteDatabase.execSQL("DROP TABLE " + TABLE_NAME);
this.finish();
}


/* 更新一条数据 */
public void UpData()
{
ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, miCount);
cv.put(TABLE_DATA, "修改后的数据" + miCount);

/* 更新数据 */
mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + "=" + Integer.toString(miCount - 1), null);

UpdataAdapter();
}


/* 向表中添加一条数据 */
public void AddData()
{
ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, miCount);
cv.put(TABLE_DATA, "测试数据库数据" + miCount);
/* 插入数据 */
mSQLiteDatabase.insert(TABLE_NAME, null, cv);
miCount++;
UpdataAdapter();
}


/* 从表中删除指定的一条数据 */
public void DeleteData()
{

/* 删除数据 */
mSQLiteDatabase.execSQL("DELETE FROM " + TABLE_NAME + " WHERE _id=" + Integer.toString(miCount));

miCount--;
if (miCount < 0)
{
miCount = 0;
}
UpdataAdapter();
}

☆ SQLiteOpenHelper应用:
在使用SQLiteOpenHelper时需要注意:SQLiteOpenHelper的构造方法中分别需要传入Content、数据库名称、CursorFactory(一般传入null,否则为默认数据库)、
数据库版本号(不能为负数)。SQLiteOpenHelper构造函数中并没有真正创建数据库,而是在调用getWritableDatabase或者getReadableDatabase方法时才真正去创建数据库,
并返回一个SQLiteDatabase对象。
代码如下:
// 打开数据库,返回数据库对象
public void open() throws SQLException
{
mDatabaseHelper = new DatabaseHelper(mContext);
mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
}


// 关闭数据库
public void close()
{
mDatabaseHelper.close();
}

/* 插入一条数据 */
public long insertData(int num, String data)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NUM, num);
initialValues.put(KEY_DATA, data);

return mSQLiteDatabase.insert(DB_TABLE, KEY_ID, initialValues);
}

/* 删除一条数据 */
public boolean deleteData(long rowId)
{
return mSQLiteDatabase.delete(DB_TABLE, KEY_ID + "=" + rowId, null) > 0;
}

/* 通过Cursor查询所有数据 */
public Cursor fetchAllData()
{
return mSQLiteDatabase.query(DB_TABLE, new String[] { KEY_ID, KEY_NUM, KEY_DATA }, null, null, null, null, null);
}

/* 查询指定数据 */
public Cursor fetchData(long rowId) throws SQLException
{

Cursor mCursor =

mSQLiteDatabase.query(true, DB_TABLE, new String[] { KEY_ID, KEY_NUM, KEY_DATA }, KEY_ID + "=" + rowId, null, null, null, null, null);

if (mCursor != null)
{
mCursor.moveToFirst();
}
return mCursor;

}

/* 更新一条数据 */
public boolean updateData(long rowId, int num, String data)
{
ContentValues args = new ContentValues();
args.put(KEY_NUM, num);
args.put(KEY_DATA, data);

return mSQLiteDatabase.update(DB_TABLE, args, KEY_ID + "=" + rowId, null) > 0;
}

☆ 数据共享(Content Providers):是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使各个应用程序之间实现数据共享。
小结:主要介绍了android中4种存储方式,介绍了4种存储方式的用法,及使用范围,着重讲了SQLite用法。


更多相关文章

  1. 我的android 第12天 - 嵌入式关系型SQLite数据库存储数据
  2. android 数据双向绑定学习笔记
  3. Android用GSon处理Json数据
  4. android 3d游戏研究(二)(边学边写,多谢高手指正,鞠躬) :数据库
  5. 基于FFmpeg的音频编码(PCM数据编码成AAC android)
  6. Android利用JDBC连接服务器数据库
  7. Android 本地数据存储 API(二)
  8. Android 数据存储四种方式
  9. 赵雅智_使用sqlite创建数据库

随机推荐

  1. 都为你整理好了,5种Java 随机方式对比!你都
  2. 为什么我们要面向接口编程?!
  3. Linux性能优化(十四)——CPU Cache
  4. Linux性能优化(十一)——CPU性能优化原理
  5. 5G 有可能会使 Web 明显变慢[每日前端夜
  6. 在 HTML 中包含资源的新思路[每日前端夜
  7. Java后端开发三年多线程你都懂,问你异步编
  8. 把 WebAssembly 用于提升速度和代码重用[
  9. VS中scanf等函数报错解决方法
  10. 怎样用 JavaScript 操作 Cookie[每日前端