Android数据存储

一、以文件(File)的方式存储

1、存储到手机内存

(1)通过FileOutputStream类来实现

File file = new File("/data/data/com.example.test/123.txt");
		try {
			fos = new FileOutputStream(file);
			fos.write("hello world".getBytes());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(fos != null)
					fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
注意,这种方式保存文件,其保存路径必须为/data/data/包名/ 目录下

此外,只有当new FileOutputStream()执行完才会在上面的路径下生成123.txt文件,new File()执行完是不会直接生成实际的文件的。

(2)通过Context的openFileOutput来实现

FileOutputStream fos = null;
			try {
				fos = openFileOutput("123.txt", Activity.MODE_PRIVATE);
				fos.write("hello world".getBytes());
				Toast.makeText(MainActivity.this, "保存成功", 3000).show();
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(fos != null){
					try {
						fos.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
这种方式保存文件相对简单,不需要显式指明路径。

文件自动会保存到/data/data/包名/files/ 目录下


2、以文件的方式存储到SD卡

//判断SD卡是否已经挂载
			if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
				File file = Environment.getExternalStorageDirectory(); //获得SD卡的路径
				File f = new File(file,"123.txt");
				FileOutputStream fos = null;
				try {
					fos = new FileOutputStream(f);
					fos.write("hello world".getBytes());
					fos.close();
					Toast.makeText(MainActivity.this, "保存成功", 3000).show();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}else{
				Toast.makeText(MainActivity.this, "SD卡不存在", 3000).show();
			}

二、以SharePreference的方式存储

开发中,用得比较多的一种存储方式,适合于存储小量的数据。比如记住登陆账号,选择状态等等。。

存储数据代码:

/通过Context的getSP方法获得SharedPreferences对象
			//参数一:文件名        参数二:保存属性,这里设置为私有
			SharedPreferences sp = getSharedPreferences("config", Activity.MODE_PRIVATE);
			//要想往config里写入数据,必须先获得编辑器,获得编辑器的方法如下:
			Editor editor = sp.edit();
			editor.putString("user", "zhang");
			editor.putString("password", "123456");
			editor.commit();  //数据必须提交才能成功保存
			Toast.makeText(MainActivity.this, "保存成功", 3000).show();
获取数据代码:

SharedPreferences sp = getSharedPreferences("config", Activity.MODE_PRIVATE);
			String getUser = sp.getString("user", "none");
			String getPw = sp.getString("password", "none");


三、以SQLite的方式存储数据

1、定义一个类,继承于SQLiteOpenHelper

重写onCreate和onUpgrade方法,并且增加一个构造方法,该构造方式显式调用父类四个参数的构造方法。

public class MyOpenHelper extends SQLiteOpenHelper {
	public MyOpenHelper(Context context,String name,int version){
		super(context, name, null, version);
	}
	
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table person(id Integer primary key autoincrement," +
				"name varchar(20),age varchar(20))");
	}

	public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
		System.out.println("update");
		db.execSQL("alter table person add money varchar(20)");
	}
}
构造方法四个参数的含义:参数一,上下文。参数二,数据库的名字。参数三,CursorFactory,一般为null。

参数四,数据库的版本。

onCreate方法会在当该名字的数据库不存在的时候,调用getReadableDatabase或者getWritableDatabase方法时

执行。其中SQL语句如上代码所示,创建一张person表,id是整形并且是自增长的,name和age是普通类型

onUpgrade方法会在数据库版本号往上递增的时候回调。上面的SQL语句的含义是,在person表中增加一栏money。

2、增删改查操作

创建数据库:

private class CreateListener implements OnClickListener{
		public void onClick(View v) {
			MyOpenHelper helper = new MyOpenHelper(MainActivity.this,
					"sqltext", 1);
			SQLiteDatabase sql = helper.getReadableDatabase();
		}
	}
第一次执行上述语句,会创建一个名字为sqltext的数据库。


更新数据库:

private class UpdateListener implements OnClickListener{
		public void onClick(View v) {
			MyOpenHelper helper = new MyOpenHelper(MainActivity.this,
					"sqltext", 2);
			SQLiteDatabase sql = helper.getReadableDatabase();
		}
	}
版本号由1升为2的时候,会更新数据库,调用onUpgrade方法。


增加数据:

通过ContentValues类往数据库增加15条数据

private class InsertListener implements OnClickListener{
		public void onClick(View v) {
			MyOpenHelper helper = new MyOpenHelper(MainActivity.this,
					"sqltext", 2);
			SQLiteDatabase sql = helper.getWritableDatabase();
			ContentValues values = new ContentValues();
			for(int i=0; i<15; i++){
				values.put("name", "test"+i);
				values.put("age", 20+i+"");
				values.put("money", 8100+i*10+"");
				sql.insert("person", null, values);
			}
		}
	}


删除数据:

private class DeleteListener implements OnClickListener{
		public void onClick(View v) {
			MyOpenHelper helper = new MyOpenHelper(MainActivity.this,
					"sqltext", 2);
			SQLiteDatabase sql = helper.getWritableDatabase();
			sql.delete("person", "name=?", new String[]{"duncan"});
		}
	}
删除person表里,name="duncan"的行


修改数据:

private class DataListener implements OnClickListener{
		public void onClick(View v) {
			MyOpenHelper helper = new MyOpenHelper(MainActivity.this,
					"sqltext", 2);
			SQLiteDatabase sql = helper.getWritableDatabase();
			ContentValues values = new ContentValues();
			values.put("money", "8800");
			sql.update("person", values, "name=?", new String[]{"test5"});
		}
	} 
修改person表里,name="test5"的那一行里的money,把它改为8800


查询数据:

private class QueryListener implements OnClickListener{
		public void onClick(View v) {
			MyOpenHelper helper = new MyOpenHelper(MainActivity.this,
					"sqltext", 2);
			SQLiteDatabase sql = helper.getReadableDatabase();
			Cursor cursor = sql.query("person", new String[]{"name","age"}, "name=?", new String[]{"test1"}, null, null, null);
			while(cursor.moveToNext()){
				String name = cursor.getString(0);
				String age = cursor.getString(1);
				System.out.println("--->" + name+"...."+age);
			}
		}
	}
sql.query的结果是把name="test1"的行里的name和age这两列,返回Cursor对象,通过该游标就可以遍历其里面的数据了。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值