注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的个人博客

欢迎访问我的网站www.shaccp.cn,学习软件编程

 
 
 

日志

 
 

Android数据存储  

2012-04-17 23:47:32|  分类: android学习笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
       在Android中一共提供了四种数据存储方式,分别介绍如下:
       一、Shared Preferences:用来存储"key-value paires"格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型。

       二、Files:它通过FileInputStream和FileOutputStream对文件进行操作。但是在android中,文件是一个程序私有的,无法读写另外的应用程序文件。

       三、SQLite:Android提供的一个标准数据库,支持SQL语句。

       四、Network:通过网络来存储和获得数据。

数据存储之Shared Preferences

代码如下所示:
package cml.shared;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity {
 
private EditText et;
   private Button btn;
   private static final String TEMP_SMS = "temp_sms";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        et = (EditText)findViewById(R.id.editText1);
        btn = (Button)findViewById(R.id.button1);
        
        //获得SharedPreferences实例
        SharedPreferences pre = getSharedPreferences(TEMP_SMS, MODE_WORLD_READABLE);
        //从SharedPreferences中获得短信内容
        String content = pre.getString("sms_content", "");
        //在EditText显示短信内容
        et.setText(content);
    }
    @Override
protected void onStop() {
super.onStop();
//获得编辑器
SharedPreferences.Editor editor = getSharedPreferences(TEMP_SMS, MODE_WORLD_WRITEABLE).edit();
//将EditText中的文本内容添加到编辑器
editor.putString("sms_content", et.getText().toString());
//提交编辑器内容
editor.commit();
}
}

当编辑一些内容,退出屏幕在返回时,发现原来的内容还在。其实他是把要保存的内容作为XML文件保存到了/data/data/package/shared_prefs/下面了。如图所示:Android数据存储 - cml15000352380 - cml15000352380的博客

运行结果如图:
 
Android数据存储 - cml15000352380 - cml15000352380的博客


数据存储之File

代码如下:
package cml.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
   private Button btn1,btn2;
   private EditText et1,et2;
   //文件名称字符串常量
   private static final String FILE_NAME = "temp.txt";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn1 = (Button)findViewById(R.id.button1);
        btn2 = (Button)findViewById(R.id.button2);
        et1 = (EditText)findViewById(R.id.editText1);
        et2 = (EditText)findViewById(R.id.editText2);
        
        //为按钮设置单击事件监听
        btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 写内容
write(et1.getText().toString());
}
});
        
      //为按钮设置单击事件监听
        btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 读内容
et2.setText(read());
}
});
      }
    //读文件方法
    private String read(){
    //实例化文件输入流对象
    try {
FileInputStream fis = openFileInput(FILE_NAME);
//定义缓存数组
byte[] buffer = new byte[fis.available()];
//读到缓冲区
fis.read(buffer);
return new String(buffer);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
    }
    //写方法
    private void write(String content){
    //实例化文件输出流
    try {
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
//写内容
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();
}
          }
    }
    
文件默认保存在/data/data/package/files下面。如图所示:
Android数据存储 - cml15000352380 - cml15000352380的博客

 运行结果:
 Android数据存储 - cml15000352380 - cml15000352380的博客
 
数据存储之 SQLite

    SQLites是一个嵌入式数据库引擎,针对内存有限的设备提供的一种高效的数据库引擎。
    Android提供了创建和使用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类提供了更简洁的功能。

1.打开或者创建数据库
下面代码创建了一个temp.db的数据库。
SQLiteDatabase.openOrCreateDatabase("/data/data/com.amaker.test/databases/temp.db",null);

2.创建表
下面代码创建了一张用户表,属性列为:_id(主键并且自增)、username(用户名称)、password(密码).
private void createTable(SQLiteDatabase db){
//创建表SQL语句
String sql = "create table UserTbl(_id integer primary key autoincrement,username text,password text)";
//执行SQL语句
db.execSQL(sql);
}
    
3.插入数据
下面代码演示了如何插入一条记录到数据库
//插入数据1
private void insert(SQLiteDatabase db){
//插入数据SQL语句
String sql = "insert into UserTbl(username,password)values('amaker','123')";
//执行语句
db.execSQL(sql);
}
//插入数据2
private void insert2(SQLiteDatabase db){
//实例化常量值
ContentValues cv = new ContentValues();
//添加用户名
cv.put("username", "abc");
//添加密码
cv.put("password", "456");
//插入
db.insert("UserTbl", null, cv);
}

4.删除数据
下面代码演示如何删除记录:
//删除
  private void delete(SQLiteDatabase db){
 //删除SQL语句
 String sql = "delete from UserTbl where _id = 2";
 //执行SQL语句
 db.execSQL(sql);
  }
  //删除2
  private void delete2(SQLiteDatabase db){
 //删除条件
 String whereClause = "id=?";
 //删除条件参数
 String[] whereArgs = {String.valueOf(1)};
 //执行删除
 db.delete("UserTbl", whereClause, whereArgs);
  }

5.查询数据
 //查询
   private void query(SQLiteDatabase db){
  //查询获得游标
  Cursor c = db.query("UserTbl", null, null, null, null, null, null);
  //判断游标是否为空
  if(c.moveToFirst()){
  for (int i = 0; i < c.getCount(); i++) {
c.move(i);
//获得ID
int id = c.getInt(0);
//获得用户名
String username = c.getString(1);
//获得密码
String password = c.getString(2);
//输出用户信息
System.out.println(id+":"+username+":"+password);
}
  }
   }

6.修改数据
下面的代码演示了如何更新数据记录。
//修改
  private void update(){SQLiteDatabase db}{
 //修改SQL语句
 String sql = "update UserTbl set password = 888 where _id = 1";
 //执行SQL语句
 db.execSQL(sql);
  }
  //修改2
  private void update2(SQLiteDatabase db){
 ContentValues values = new ContentValues();
 //在values中添加内容
 values.put("password", "999");
 //修改条件
 String whereClause = "_id=?";
 //修改添加参数
 String[] whereArgs = {String.valueOf(1)};
 //修改
 db.update("UserTbl", values, whereClause, whereArgs);
  }

SQLiteOpenHelper
    SQLiteOpenHelper是SQLiteDatabase的一个帮助类,下面代码演示了通过继承  SQLiteOpenHelper来实现创建库、创建表、插入数据和查询数据的过程。
  评论这张
 
阅读(31)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017