android-----之数据存储

Android的四种数据存储方式:

1.SharedPreferences

2.SQLite

3.Content Provider

3.文件存储


一:SharedPreferences存储

  1.SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。

  2.实现SharedPreferences存储的步骤如下:

       (1)获取SharedPreferences对象

       (2)获得SharedPreferences.Editor对象

       (3)通过Editor接口的putXxx方法保存key-value对,其中Xxx表示不同数据类型

       (4)通过Editor接口的commit方法保存key-value对


            pref=getSharedPreferences("Userinfo", MODE_PRIVATE);
	    editor=pref.edit();
	    
	    //获得保存的名字
		String name=pref.getString("userName", "");
		if (name==null) {
			//如果当前值为空
			chk.setChecked(false);
		}
		else {
			//如果当前值不为空,则给赋值
			chk.setChecked(true);
			etuserName.setText(name);
		}


public void doClick(View v) {
    	
    	switch (v.getId()) {
    	
		case R.id.btn_login:
			String name=etuserName.getText().toString().trim();//去掉首位符号
			String pass=etuserPassword.getText().toString().trim();//去掉首位符号
			if ("admin".equals(name)&&"123456".equals(pass)) {
				if (chk.isChecked()) {
					editor.putString("userName", name);
					editor.commit();
				}
				else {
					editor.remove("userName");
					editor.commit();
				}
				Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
			}
			else {
				Toast.makeText(MainActivity.this, "禁止登陆",Toast.LENGTH_LONG ).show();
			}
			break;
		case R.id.btn_cancel:
			
			break;
		default:
			break;
		}
		
	}





二.SQLite

SQLite常用语句:

db.exectSQL(sql)                                         //执行任何SQL语句

db.insert(table,nullColumnHack,values)      //插入

db.delete(table,whereClause,whereArgs)   //删除

db.update(table,values,whereCaluse,whereArgs)   //更新

db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy)  //查找

db.rawQuery(sql,selectionArgs)                                                                    //查找


1.Cursor是Android查询数据后得到的一个管理数据集合的类,正常情况下,如果查询得到的数据量较小时不会有内存问题,而且虚拟机能够保证Cusor最终会被释放掉。

2.然而如果Cusor的数据量特别大,特别是如果里面有Blob信息时,应该保证Cusor占用的内存被及时的释放掉,而不是等待GC来处理。


            //每个程序都有自己的数据库,默认情况下互不干扰
            //创建一个数据库 并且打开
            SQLiteDatabase db=openOrCreateDatabase("user.db", MODE_PRIVATE, null);
	    db.execSQL("create table if not exists usertb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");
	    db.execSQL("insert into usertb(name,age,sex)values('张三',18,'女')");
	    db.execSQL("insert into usertb(name,age,sex)values('李四',19,'女')");
	    db.execSQL("insert into usertb(name,age,sex)values('王五',20,'男')");
	
	    Cursor c=db.rawQuery("select * from usertb", null);
	    if(c!=null)
	    {
	    	while(c.moveToNext())
	    	{
	    		Log.i("info", "_id:"+c.getInt(c.getColumnIndex("_id")));
	    		Log.i("info", "name:"+c.getString(c.getColumnIndex("name")));
	    		Log.i("info", "age:"+c.getInt(c.getColumnIndex("age")));
	    		Log.i("info", "sex:"+c.getString(c.getColumnIndex("age")));
	    		Log.i("info", "!!!!!!!!!!!!!!!!!!!!!!");
	    	}
	    	c.close();
	    }
	    db.close();



SQLite:不直接使用sql语句,调用函数来操作

                SQLiteDatabase db=openOrCreateDatabase("stu.db", MODE_PRIVATE, null);
		db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");
		ContentValues values=new ContentValues();
		
		values.put("name", "张三");
		values.put("age", 19);
		values.put("sex", "男");
		//插入数据
		db.insert("stutb", null, values);     
		
		values.clear();
		values.put("name", "张三峰");
		values.put("age", 36);
		values.put("sex", "男");
		//插入数据
		db.insert("stutb", null, values);     
		
		values.clear();
		values.put("name", "张三枫");
		values.put("age", 45);
		values.put("sex", "男");
		//插入数据
		db.insert("stutb", null, values);     
		
		values.clear();
		values.put("sex", "女");
		//将id>3的人性别全部改成女
		db.update("stutb", values, "_id>?", new String[]{"3"});
		//将名字中带有峰子的人删除
	       db.delete("stutb", "name like?", new String[]{"%峰%"});
	       //查询所有人员
	       Cursor c=db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "age");
	
	       if(c!=null)
	       {
	    	   String[] columns=c.getColumnNames();
	    	   while(c.moveToNext())
	    	    {
	    		  for(String columnName:columns)
	    		   {
	    			Log.i("info", columnName+":"+c.getString(c.getColumnIndex(columnName)));
	    		   }
	    	    }
	    	    c.close();
	       }
	       db.close();

运行结果:


结果分析:因为插入了两遍,所以总共有六条数据,首先将id>3的人性别都改为了女,然后删除了名字中有“峰”的人,然后将查询结果返回给Cusor ,返回结果按id排序的,所以最终打印结果如上所示。



三:FILE文件存储

/******************************************************************/

如何将内容写入文件并从文件中读取数据

/******************************************************************/

//保存文件
	public void WriteFile(String content)
	{
		FileOutputStream fos;
		try {
			fos = openFileOutput("a.text", MODE_PRIVATE);
			fos.write(content.getBytes());
			fos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
	}



//读取文件
	public String readFile()
	{
		String content=null;
		FileInputStream fis;
		try {
			fis = openFileInput("a.text");
			ByteArrayOutputStream baos=new ByteArrayOutputStream();
			byte[] buffer=new byte[1024];
			int len=0;
			while((len=fis.read(buffer))!=-1)
				{
					baos.write(buffer, 0, len);
				}
			content=baos.toString();
			fis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return content;
		
	}



//调用这两这两个函数
                edt=(EditText) findViewById(R.id.edt);
		btn_write=(Button) findViewById(R.id.btn_write);
		tv=(TextView) findViewById(R.id.contentVaule);
		
		btn_write.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				WriteFile(edt.getText().toString());
				tv.setText(readFile());
			}
		});




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值