1、SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
具体实现代码如下:实现存储,读取,清除,删除
效果图:
首先创建:// 首先拿到sharedpreference对象
mShared =getSharedPreferences(SHARED_MAIN_XML, MODE_PRIVATE)
存储:
private void write() {// 存入数据
savename = name.getText().toString().trim()
saveage = Integer.valueOf(age.getText().toString().trim())
Editor editor = mShared.edit()
editor.putString("name", savename)
editor.putInt("age", saveage)
// 保证 *** 作的事务完整性
editor.commit()
}
阅读:
private String read() {// 从数据库里读取数据
namecontent = mShared.getString("name", "数据库里没有存储姓名")
agecontent = mShared.getInt("age", 0)
String reading = "姓名:" + namecontent + "\n年龄:" + agecontent
return reading
}
清除内容:
private void clear() {//清除内容
/** 开始清除SharedPreferences中保存的内容 **/
Editor editor = mShared.edit()
editor.remove("name")
editor.remove("age")
editor.commit()
}
删除文件:
private void delete() {//删除文件
/** 删除SharedPreferences文件 **/
Filefile = new File("/data/data/cn.csdn.activity" + "/shared_prefs/"
+ SHARED_MAIN_XML + ".xml")
if (file.exists()) {
file.delete()
Toast.makeText(this, "删除成功", Toast.LENGTH_LONG).show()
}
}
haredPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多 *** 作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储 *** 作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
2、 File: 即常说的文件(I/O)存储方法,常用存储大数量的数据,但是缺点是更新数据将是一件困难的事情。
下面实现:在本地data文件下使用自己生成的文件处理数据的新建储存 读取 删除
如果说不想把内容存在SharedPreferences中的话,我们可以自己写一个文件保存须要的数据,在这里我将文件保存在系统中的工程路径下。
跟上面布局一样,删除文件也一样,清除内容也查不多,下面只是简单的写和读的方法:
写:
17String
nameage="名字:"+name.getText().toString().trim()+"年龄:"+age.getText().toString()
try {
os = this.openFileOutput(SHARED_MAIN_XML, MODE_PRIVATE)
/* 把字符串转换成字节数组,写入文件中 */
os.write(nameage.getBytes())
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}finally {
try {
/* 关闭文件输出流 */
os.close()
} catch (IOException e) {
e.printStackTrace()
}
}
读:
private String read() {
String nameage=""
// 打开文件输入流,
try {
is = this.openFileInput(SHARED_MAIN_XML)
/* 初始化字节数组 */
b = new byte[1024]
/* 从文件输入流中读取内容到字节数组中,返回内容长度 */
int length = is.read(b)
/* 把字节数组转换成字符串 */
nameage= new String(b)
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
return nameage
}
很简单吧!!
3、 SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:
NULL: 空值
INTEGER: 整数
REAL: 浮点数
TEXT: 字符串
BLOB: 大数据
它是一个轻量级的数据库、非常小 、 移植性好、效率高、可靠
在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作。
创建与删除数据库
封装一个类去继承SQLiteOpenHelper
在构造函数中传入数据库名称与数据库版本号,数据库被创建的时候会调用onCreate(SQLiteDatabase db)
方法,数据库版本号发生改变的时候会调用onUpgrade(SQLiteDatabase db, int oldVersion,
intnewVersion)方法,可以方便的对软件游戏升级后做出相应处理避免覆盖安装数据库发生改变产生的错误。调用SQLiteOpenHelper
的getReadableDatabase()方法去创建数据库,如果数据库不存在则创建并且返回SQLiteDatabase对象,如果数据库存在则不创建只返回SQLiteDatabase对象。调用
deleteDatabase(DATABASE_NAME)方法 传入数据库名称则可删除数据库。
第一种:详细请看上一遍博客:android之利用SQLite数据库实现登陆和注册,http://blog.csdn.net/rhljiayou/article/details/7085347
下面介绍第二种:另一种添删改查 *** 作
效果图:
布局文件很简单,在此不再给出!!
直接给创建数据库和表,增删改查的代码:
public class UserService {
private DatabaseHelper helper
public UserService(Context context, String name, int version) {
helper = new DatabaseHelper(context, name, version)
}
public UserService(Context context, String name) {
helper = new DatabaseHelper(context, name)
}
public void insert(UserDao user) {// 插入数据
SQLiteDatabase sdb = helper.getWritableDatabase()
ContentValues values = new ContentValues()
values.put("username", user.getUsername())
values.put("password", user.getPassword())
sdb.insert("user", "name", values)
sdb.close()
}
public void delete(int id) {// 删除数据
SQLiteDatabase sdb = helper.getWritableDatabase()
sdb.delete("user", "id=?", new String[]{String.valueOf(id)})
sdb.close()
}
public void update(UserDao user, int id) {// 更新数据
SQLiteDatabase sdb = helper.getWritableDatabase()
ContentValues values=new ContentValues()
values.put("username", user.getUsername())
values.put("password", user.getPassword())
sdb.update("user", values, "id=?", new String[]{String.valueOf(id)})
sdb.close()
}
public Cursor select() {// 查询所有数据
SQLiteDatabase sdb = helper.getWritableDatabase()
return sdb.query("user", new String[]{"id as _id","username","password"},
null, null, null, null, null)
}
public UserDao find(int id){//按id查询数据
UserDao user=null
SQLiteDatabase sdb=helper.getWritableDatabase()
Cursor cursor=sdb.query("user", new String[]{"id","username","password"},
"id=?", new String[]{String.valueOf(id)}, null, null, null)
if(cursor.moveToFirst()){
user=new UserDao()
user.setId(cursor.getInt(0))
user.setUsername(cursor.getString(1))
user.setPassword(cursor.getString(2))
}
cursor.close()
sdb.close()
return user
}
}
插入数据:通过insert(String table, StringnullColumnHack, ContentValues
values)方法插入数据,其中参数含义分别为:
table: 目标表名
nullColumnHack:
指定表中的某列列名。因为在SQLite中,不允许不允许插入所有列均为null的记录,因此初始值有值为空时,此列需显式赋予null
values:ContentValues对象,类似于java中的Map。以键值对的方式保存数据。
你好!首先xxxSQLHelper是继承自SQLiteDatabase,而你在外部new出来的xxxSQLHelper实例就是一个数据库的对象,跟你的表无关。对于你的业务逻辑,你可以在onCreate方法里面穿件你需要的所有表。然后在外部可以通过new出来的xxxSQLHelper实例去 *** 作不同的表。
希望这样的回答对你有帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)