Android数据存储

持久化技术

android系统中主要提供了三种方式用于简单的实现数据持久化功能,即文件存储、SharePreference存储以及数据库存储。

文件存储

文件存储是Android中最基本的一种数据存储技术方式,它不对存储的内容进行任何的格式处理,所有的数据都是原封不动的保存到文件当中,比较适合用于存储一些简单的文本数据或二进制数据。

1、存文件
Context类提供了一个openFileOutput方法,可以用于将数据存储到指定文件中。该方法接收两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称。第二个参数是文件的操作模式,MODE_PRIVATE是默认的模式,表示当指定同样的文件名的时候,所写入的内容将会覆盖原文件中的内容,MODE_APPEND则表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。eg:

public void save(String inputText) {
        FileOutputStream out = null;
        BufferedWriter writer = null;
        try {
            out = openFileOutput("data", Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(inputText);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

2、读文件
Context类中还提供了一个openFileInput的方法,用于从文件中读取数据,它只接收一个参数,即要读取的文件名,并返回一个FileInputStream对象。eg:

public String load() {
        FileInputStream in = null;
        BufferedReader reader = null;
        StringBuilder content = new StringBuilder();
        try {
            in = openFileInput("data");
            reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = reader.readLine()) != null) {
                content.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return content.toString();
    }

SharedPreferences存储

SharedPreferences使用键值对的方式来存储数据。

  1. 存储数据到SharedPreferences
    要使用SharedPreferences存储数据,首先要获取SharedPreferences对象,Android中主要提供三种方法得到该对象:
    Context类中的getSharedPreferences()方法
    Activity类中的getSharedPreferences()方法
    PreferenceManager类中的getDefaultSharedPreferences()方法:这是一个静态方法,它自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。
    得到SharedPreferences对象以后就可以开始向SharedPreferences文件中存储数据了,eg:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        saveData = (Button) findViewById(R.id.save_data);
        restoreData = (Button) findViewById(R.id.restore_data);
        saveData.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
                editor.putString("name", "Tom");
                editor.putInt("age", 28);
                editor.putBoolean("married", false);
                editor.commit();
            }
        });

运行程序后,在目录/data/data/包名/shard_prefs中可以看到一个data.xml文件。
2. 从SharedPreferences中读取数据
读取数据的过程很简单,看例子:

restoreData.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
                String name = pref.getString("name", "");
                int age = pref.getInt("age", 0);
                boolean married = pref.getBoolean("married", false);
                Log.d("MainActivity", "name is " + name);
                Log.d("MainActivity", "age is " + age);
                Log.d("MainActivity", "married is " + married);
            }
        });
    }

SQLite数据库

Android系统内置了数据库,SQLite是一款轻量级的关系型数据库,运算速度快,占用资源少,可以用于保存一些数据量大、结构性复杂的数据。

  1. 创建数据库
    android专门提供了一个SQLiteOpenHelper类,帮助我们简单的对数据库进行创建和升级。eg:
public class MyDataBaseHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK="create table Book ("
            + "id integer primary key autoincrement, " 
            + "author text, "
            + "price real, " 
            + "pages integer, " 
            + "name text)";
    private Context context;

    public MyDataBaseHelper(Context context, String name,CursorFactory factory, int version) 
    {
        super(context, name, factory, version);
        this.context=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL(CREATE_BOOK);
        Toast.makeText(context, "Create successed", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
    }
}
public class MainActivity extends Activity {

    MyDataBaseHelper dbHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper=new MyDataBaseHelper(this, "BookStore.db", null, 1);
        Button button=(Button) findViewById(R.id.button1);
        Button addData=(Button) findViewById(R.id.button2);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0)
            {
                dbHelper.getWritableDatabase();

            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

我们在onCreate方法中构建了一个MyDataBaseHelper对象,并且通过构造函数的参数将数据库指定为BookStore.db,版本号指定为1,然后在按钮点击事件响应中调用了getWritableDatabase方法,第一次点击按钮就会检测当前程序中并没有BookStore.db这个数据库,于是会创建该数据库并调用MyDataBaseHelper中的onCreate方法,这样Book表也就得到了创建。
2. 升级数据库

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists Category");
        onCreate(db);
    }
dbHelper=new MyDataBaseHelper(this, "BookStore.db", null, 2);

这样onUpgrade方法就会得到执行
3. 添加数据

 addData.setOnClickListener(new OnClickListener() 
        {

            @Override
            public void onClick(View arg0) {
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                ContentValues values=new ContentValues();
                values.put("name", "xujian");
                values.put("author", "Dan Brow");
                values.put("pages", 454);
                values.put("price", 16.96);
                db.insert("Book", null, values);
                values.clear();
                values.put("name", "The Lost Symbol");
                values.put("author", "Dan Brown");
                values.put("pages", 510);
                values.put("price", 19.95);
                db.insert("Book", null, values);

            }
        });

注:第一行代码-Android读书笔记

你可能感兴趣的:(android,数据库,数据存储)