[Android] SQLiteOpenHelper
第一次自已寫SQLite ….
首先要先知道 有那些欄位 需要的 .
這些欄位請參考你的實際需求~
以下先用自己的sample說明
Implement
這邊使用 SQLiteOpenHelper實作
先新增一個class, extends SQLiteOpenHelper
public class DatabaseHelper extends SQLiteOpenHelper {}
SQLiteOpenHelper 有兩個 abstract 需要實作, 別擔心 Android studio 會提醒你
@Override
public void onCreate(SQLiteDatabase db) {
// onCreate 會在app發現沒有Database檔案時呼叫, 不是每次都會呼叫到
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Database版本更新時
}
此時,因為 SQLiteOpenHelper 沒有預設的Constraotor
所以你需要
public ExpenseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
// Context 就是Context
// Name 為Database名稱 預設是"main"
// CursorFactory 其實我不是很熟他在幹嘛 等我認真研究完在補上 先帶null
// Version databse 版本
}
現在你需要 開啟table 參考以下
CREATE TABLE table_name (
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
···
);
轉換成Android要帶入的
private String createTable = "CREATE TABLE exp ( _id INTEGER PRIMARY KEY, " +
"cdate DATETIME NOT null, " +
"info VARCHAR, " +
"amount INTEGER)";
table name 取名為 exp
_id 是PRIMARY KEY
cdate, info, amount 皆為欄位
後面的為data type
所以把這組String 帶到剛剛的 onCreate :
private String createTable = "CREATE TABLE exp ( _id INTEGER PRIMARY KEY, " +
"cdate DATETIME NOT null, " +
"info VARCHAR, " +
"amount INTEGER)";
@Override
public void onCreate(SQLiteDatabase db) {
// onCreate 會在app發現沒有Database檔案時呼叫, 不是每次都會呼叫到
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Database版本更新時
}
到這邊就可以使用了
DatabseHelper helper = new DatabseHelper(this, "main.db", null, 1);
ContentValues values = new ContentValues();
values.put("cdate", _date);
values.put("info", _info);
values.put("amount", _amount);
helper.getWritableDatabase().insert("exp", null, values);
當執行insert時, DatabseHelper 會確認是否有main.db
沒有會先執行 onCreate, 創建出來後 再執行insert
Tool
使用Facebook 開發的stetho > 確認 SharePreference 跟 Database 的內容
參考stackOverflow
使用 stetho
在Module 底下的gradle 加入
compile 'com.facebook.stetho:stetho:1.4.2'
在MainAavitity 的 onCreate() 中加入
import com.facebook.stetho.Stetho;
.....
......
........
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Stetho.initializeWithDefaults(this);
......
......
......
}
build 完後可以直接在Chrome上使用
在 chrome 網址列上輸入:chrome://inspect/#devices
可以看到以下頁面:
App 在運作的時候 會出現一個新的 link
點下去就對了
會出現新的頁面
找到你自己的DB 跟 table 就可以看到存取是否有問題