SQLite數據庫存儲--創建、升級數據庫
SQLite是一款輕量級的關系型數據庫
創建數據庫
Android為了讓我們能夠更加方便的管理數據庫,專門提供了一個SQLiteOpenHelper
幫助類,借助這個類就可以簡單地對數據庫進行創建和升級
創建、升級數據庫函數
SQLiteOpenHelper
類是一個抽象類,SQLiteOpenHelper
類中有兩個抽象方法,分別是onCreate()
和onUpgrade()
方法:
-
onCreate()
方法是實現創建數據庫的邏輯,數據庫文件會存放在/data/data/(packageName)/database/目錄下 -
onUpgrade()
方法是實現升級數據庫的邏輯,當實例化SQLiteOpenHelper
子類對象時,傳入的參數version
大于當前數據庫的版本號時,當調用getReadableDatabase()
或getWritableDatabase()
時,就會調用此升級方法
獲取數據庫對象
SQLiteOpenHelper
中還有兩個重要的實例方法,getReadableDatabase()
和getWritableDatabase()
:
- 這兩個方法都可以創建或打開一個現有的數據庫(如果數據庫已存在則直接打開,否則創建一個新的數據庫<調用重寫的
onCreate()
方法>),并返回一個可對數據庫進行讀寫操作的對象 - 當數據庫不可寫入的時候,
getReadableDatabase()
方法返回的對象將以只讀的方式打開數據庫,而getWritableDatabase()
方法則會出現異常
SQLiteOpenHelper構造方法
繼承SQLiteOpenHelper
,重寫構造函數(四個參數):
public DatabaseHalper(Context context, String name, CursorFactory factory, int version) {}
-
context
:Context對象(上下文對象)。若程序在測試框架中測試代碼用于生成數據庫對象,則此時context
對象可以利用函數getContext()
獲得 -
name
:數據庫名稱 -
factory
:游標工廠,允許我們在查詢數據的時候返回一個自定義的Cursor,一般傳入null -
version
:當前數據庫的版本號
注意:SQLiteOpenHelper子類對象是必須和某個數據庫綁定起來的,當調用getReadableDatabase()
或getWritableDatabase()
時,若數據庫已存在則返回數據庫對象;若數據庫不存在,則調用onCreate()
方法,創建數據庫并返回數據庫對象
SQLite簡單知識
SQLite數據類型很簡單:
- integer:表示整型;
- real:表示浮點型
- text:表示文本類型
- blob:表示二進制類型
創建一個類繼承SQLiteOpenHelper
public class MyDatabaseHalper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table Book ("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "price real,"
+ "pages integer,"
+ "name text)";
//定義一個Context
private Context mContext;
public MyDatabaseHalper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
//賦值語句
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
//執行SQL語句,創建數據庫表Book和Category
db.execSQL(CREATE_BOOK);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
創建數據庫,邏輯代碼:
public class MainActivity extends Activity {
private MyDatabaseHalper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//實例化數據庫幫助類
dbHelper = new MyDatabaseHalper(this, "BookStore.db", null, 1);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/**
*調用獲取數據庫對象的方法,若數據庫存在直接返回數據庫對象,不存在
*則調用數據庫幫助類的onCreate()方法然后返回數據庫對象;若數據庫的版
*本和當前版本一致則不調用onUpgrade()方法,若高于當前數據庫的版本
*,則調用onUpgrade(),若低于當前數據庫的版本,則會拋出異常
*/
dbHelper.getWritableDatabase();
}
});
}
}
查看數據庫:
創建的數據庫
- BookStore.db:即為新創建的數據庫
- BookStore.db-journal:為了能讓數據庫能夠支持事務而產生的臨時日志文件,文件大小通常為0字節
使用adb shell 命令來查看數據庫:
- 在SDK中的platform-tool目錄下有一個adb命令,在windows的環境變量中配置此路徑
-
進入到adb shell命令
進入shell命令 -
進入到數據庫所在的文件目錄
創建的數據庫 -
進入數據庫,查詢數據庫表
數據庫和表 - 使用
.exit
命令即可退出shell命令
升級數據庫(添加一個數據庫表),邏輯代碼
-
重寫SQLiteOpenHelper類中的
onUpgrade()
方法//添加創建數據庫表的語句 public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement," + "category_name text," + "category_code integer)"; -- //若數據庫表則刪除表 db.execSQL("drop table if exists Book"); db.execSQL("drop table if exists Category"); //調用onCreate()方法 onCreate(db); -- //在onCreate()方法中添加創建數據庫表的代碼 db.execSQL(CREATE_CATEGORY);
-
在活動類中更改以下代碼
//在實例化SQLiteOpenHelper類的時候,指定的version值大于當前數據庫的版本號即可,會自動調用onUpgrade()方法 dbHelper = new MyDatabaseHalper(this, "BookStore.db", null, 2);