class MyDBHelper(context: Context, name:String = database, factory:
SQLiteDatabase.CursorFactory?=null, version : Int = v ) :
SQLiteOpenHelper(context,name, factory, version){
//1)
companion object{
private const val database ="mdatabase.db"
private const val v = 1
}
//2)
override fun onCreate(db: SQLiteDatabase?) {
//3)
db?.execSQL("CREATE TABLE myTable( timestamp text PRIMARY KEY NOT NULL , vocabulary text NOT NULL, mean text NOT NULL)" )
}
//4)
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL("DROP TABLE IF EXISTS myTable")
onCreate(db)
}
}
回傳 cusor
moveToFirst 才能使cursor正確指向第一個位置
moveToNext()方法,可將Cursor向下移動一筆,若有資料則回傳true,若無資料則回傳false,代表無任何資料。
記得關閉 Cursor
val c = dbrw.rawQuery( "SELECT * FROM myTable",null)
// important
// 2)
c.moveToFirst()
for(i in 0 until c.count){
list.add(Model("${c.getString(0)}","${c.getString(1)}"))
//3)
c.moveToNext()
}
//4) 記得要關閉 cusor
c.close()
insert(String table, String nullColumnHack, ContentValues values)
table : 數據表的名稱
nullColumHack:若values不為null並且元素的個數大於0,則一般將nullColumnHack設為null
ContentValues:類似一個map.通過鍵值對的形式存儲值
建立 ContentValues , ContentValues:類似一個map.通過鍵值對的形式存儲值
ContentValues 通過鍵值建立 , 需要傳入 key(欄位) 跟 value(他的data)
dbrw (DataBase) insert 我們所建立的 ContentValue
for( i in datalist.indices){
// 1)
val values = ContentValues()
val vocabulary = datalist[i].vocabulary
val mean = datalist[i].meaning
// 2)
values.put("vocabulary", vocabulary);
values.put("mean", mean);
// 3)
dbrw.insert("myTable", null, values)
}
如果 欄位型別是 TIMESTAMP ,以 where 條件進行查詢時,查詢值前後要加上單引號。資料表 myTable 中有一個欄位 create_time ,其欄位型別是 TIMESTAMP。若是要查找 create_time 符合某個條件的資料 e.g. SELECT * FROM myTable WHERE create_time >= '1693451669'