除了可以使用檔案或SharedPreferences儲存資料,還可以選擇使用SQLite資料庫儲存資料。
在Android的平台上,整合了一個嵌入式關係型資料庫—SQLite,SQLite3支援NULL、INTEGER、REAL(浮點數字)、TEXT(字串文本)和BLOB(二進位對象)資料類型,雖然它支援的類型只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等資料類型,
只不過在運算或儲存時會轉成對應的五種資料類型。
SQLite最大的特點是你可以把各種類型的資料儲存到任何欄位中,而不用關心欄位聲明的資料類型是什麼;
SQLite中還可以進行解析不部分的SQL語句,所以用起來挺方便的;
在使用SQLite中,Android系統為什麼實現了SQLiteOpenHelper的抽象類別,所以我去實現其中的方法,來讓我們對資料進行管理建立於版本管理;
在類SQLiteOpenHelper的協助類是,
我們去實現 onCreate(SQLiteDatabase db), onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)這兩個方法
①:public abstract void onCreate (SQLiteDatabase db) 當資料庫第一次被建立的時候去調用,在onCreate()方法裡面可以產生資料庫表結構和添加一些應用使用到的初始化資料,返回DataBase
②:public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) 當資料庫需要更新的時候調用,調用的時候需要先刪除原來的表,或者去更新新的版本號碼
當然我們還會用到getReadableDatabase()與個頭WritableDatabase()這兩個方法來進行擷取資料的執行個體
但getWritableDatabase() 方法以讀寫方式開啟資料庫,一旦資料庫的磁碟空間滿了,資料庫就只能讀而不能寫;
getReadableDatabase()方法先以讀寫方式開啟資料庫,如果資料庫的磁碟空間滿了,就會開啟失敗,
不過很幸運的時候,加入開啟失敗,還是繼續嘗試用唯讀方式去開啟資料庫
Demo:以學生資訊管理來舉例
Student_Model:
- package com.jiangqq.model;
-
- import java.io.Serializable;
-
- /**
- * 學生類的model類
- *
- * @author jiangqq
- *
- */
- public class Student implements Serializable
- {
- private Integer stu_id;
- private String name;
- private String gender;
- private Short age;
- private String telphone;
-
- public Student() {
- super();
- }
-
- public Student(String name, String gender, Short age, String telphone) {
- super();
- this.name = name;
- this.gender = gender;
- this.age = age;
- this.telphone = telphone;
- }
-
- public Student(Integer id, String name, String gender, Short age,
- String telphone) {
- super();
- this.stu_id = id;
- this.name = name;
- this.gender = gender;
- this.age = age;
- this.telphone = telphone;
- }
-
- public Integer getId() {
- return stu_id;
- }
-
- public void setId(Integer id) {
- this.stu_id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getGender() {
- return gender;
- }
-
- public void setGender(String gender) {
- this.gender = gender;
- }
-
- public Short getAge() {
- return age;
- }
-
- public void setAge(Short age) {
- this.age = age;
- }
-
- public String getTelphone() {
- return telphone;
- }
-
- public void setTelphone(String telphone) {
- this.telphone = telphone;
- }
-
- @Override
- public String toString() {
- return "Student [id=" + stu_id + ", name=" + name + ", gender="
- + gender + ", age=" + age + ", telphone=" + telphone + "]";
- }
-
- }
首先先寫資料庫協助類:
- package com.jiangqq.service;
-
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
-
- public class DBOpenHelper extends SQLiteOpenHelper
- {
-
- private static final String DB_NAME = "student.db";
- private static final int VERSION = 1;
- private static final String CREATE_TABLE = "create table student (stu_id integer primary key autoincrement,name text,gender text,age integer,telphone text);";
-
- public DBOpenHelper(Context context) {
- super(context, DB_NAME, null, VERSION);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL(CREATE_TABLE);
-
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS student");
- onCreate(db);
- }
-
- }
至此資料庫的協助類已經基本完成,接下來要用SQLiteDatabase類中的方法來對學生資訊進行管理了;