2017-09-06 57 views
4

tl; dr:我有問題試圖讓我的代碼工作,現在我可以使用Anko創建數據庫並插入列,但當我嘗試插入數據時當我打開我的sqliteman列空的數據庫中,我也不知道如何檢索字符串的數據/ INT要發送到View使用Anko添加/查詢/解析SQLite

這顯然是正常工作我可以看到我的數據庫,所有已創建具有正確名稱的列

class MySqlHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "db_main") { 

companion object { 
    private var instance: MySqlHelper? = null 

    @Synchronized 
    fun getInstance(ctx: Context): MySqlHelper { 
     if (instance == null) { 
      instance = MySqlHelper(ctx.applicationContext) 
     } 
     return instance!! 
    } 
} 


override fun onCreate(db: SQLiteDatabase) { 
    db.createTable("db_main", true, 
      "_id" to INTEGER + PRIMARY_KEY + AUTOINCREMENT + NOT_NULL, 
      "name" to TEXT, 
      "day" to INTEGER) 

} 

override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 
     } 

// Access property for Context 
val Context.database: MySqlHelper 
    get() = getInstance(applicationContext) 

} 

這應該工作,但是我雖然在數據庫中的所有列它不,我不明白他們沒有被添加

任何錯誤消息

下面的代碼被稱爲MainActivity

val db = MySqlHelper(this) 


fun addtosqllite(title: String, datepicker: DatePicker) { 

db.use { 
     insert("db_main", 
       "_id" to 1, 
       "name" to title, 
       "day" to datepicker.dayOfMonth) 
    } 
} 

我不知道該怎麼做 我需要從數據庫中檢索數據。我一直在閱讀文檔,但我不知道如何實現this

比方說,我有三列_idnameday 我在做這樣的事情

db.select("main_db","_id","name","day").exec { 
parseSingle //something goes here to send the data to String/Int 
} 

回答

0

我希望這不是太晚了。你可以試試這個:

database.use { 
    select("main_db", "_id", "name","day").exec { 
    parseList(object : MapRowParser<Map<String, Any?>> { 
    override fun parseRow(columns: Map<String, Any?>): Map<String, Any?> { 
     Log.e("Your result", columns.toString()) 
     return columns 
     } 
    } 
    ) 
} 
+0

如果希望所有colums,簡單地說:'選擇( 「main_db」)EXEC {',你想指定行:'選擇( 「main_db」, 「姓名」)EXEC {'例如。 – Halima