[Day 29 ] SQLite 上

设置 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)

        }


<<:  DAY29 学习30天的c++

>>:  UIView , UIViewController Life Cycle 常见问题

[05] 挂telegram机器人的hook

把上一篇刚打得code删一删 指留下需要的 post 有 data 的部分来呼叫 hook 相关功能...

JavaScript Day 30. 关於 JavaScript 中的 This

第 30 天,本来想说或许最後一天可以来一篇心得文,让自己好好休息一下,因为这 30 天花了大量的精...

[day-28] Python-实战应用-Line讯息传送

实战应用篇P1   这次我们要使用的是Line Notify当作我们的讯息传播方式,Line Not...

第十六天:在 TeamCity 上执行静态分析

昨天我们在专案里导入了 detekt 静态分析套件,只要执行 $ gradle detekt 就可以...

Day14-This

this的指向取决於谁呼叫 物件一定指向本身 其余必须透过call、bind等等强制绑定 我们先把...