iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1

設置 Table

  1. 我們需要定義資料庫名稱與版本
  2. 將建立 Table 的 SQL 寫在這 onCreate
  3. 以字串輸入SQL語法
    • TableName
    • 建立欄位
      • name : 欄位名稱
      • type :text , int ... type
      • 如果是主索引要加上 PRIMARY KEY (只能有一個)
      • 如果是必填要加上 NOT NULL
  4. onUpgrade用來修改 Table 的結構

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)

    }


}

query

  1. 回傳 cusor

  2. moveToFirst 才能使cursor正確指向第一個位置

  3. moveToNext()方法,可將Cursor向下移動一筆,若有資料則回傳true,若無資料則回傳false,代表無任何資料。

  4. 記得關閉 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

KeyWord

  • insert(String table, String nullColumnHack, ContentValues values)

  • table : 數據表的名稱

  • nullColumHack:若values不為null並且元素的個數大於0,則一般將nullColumnHack設為null

  • ContentValues:類似一個map.通過鍵值對的形式存儲值

Step

  1. 建立 ContentValues , ContentValues:類似一個map.通過鍵值對的形式存儲值

  2. ContentValues 通過鍵值建立 , 需要傳入 key(欄位) 跟 value(他的data)

  3. 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)

        }


上一篇
[Day 28] Android SharePreference
下一篇
[Day 30] SQLite 下
系列文
Android 菜鳥村-開發基礎 30篇32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
freedr
iT邦新手 5 級 ‧ 2023-08-31 11:16:14

如果 欄位型別是 TIMESTAMP ,以 where 條件進行查詢時,查詢值前後要加上單引號。資料表 myTable 中有一個欄位 create_time ,其欄位型別是 TIMESTAMP。若是要查找 create_time 符合某個條件的資料 e.g. SELECT * FROM myTable WHERE create_time >= '1693451669'

我要留言

立即登入留言