kotlin - kotlin SQLite 数据库总是写默认值,从不写新值
问题描述
这是我为我的数据库设置的类。数据库处理程序是内部类。
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.content.ContentValues
import android.util.Log
import java.sql.Date
class Scores {
var id : Int = 0
var dataBaseName = "ScoreDatabase"
var averageTime = 0.0f
val date = Date(System.currentTimeMillis()).toString()
constructor(averageTime:Float) {
this.averageTime = averageTime
Log.d("Poop", averageTime.toString())
}
constructor()
inner class DataBaseHandler(var context:Context, tableName:String): SQLiteOpenHelper(context, dataBaseName, null,1){
val TABLE_NAME = tableName
val COL_ID = "id"
val COL_AVG = "Average_Time"
val COL_DATE = "Date"
override fun onCreate(db: SQLiteDatabase?) {
val createTable = "CREATE TABLE " + TABLE_NAME +" (" +
COL_ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
COL_AVG + " VARCHAR(256)," +
COL_DATE +" VARCHAR(256)"
db?.execSQL(createTable)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
fun insertData(score: Scores){
val db = this.writableDatabase
var cv = ContentValues()
cv.put(COL_AVG,score.averageTime)
cv.put(COL_DATE,score.date)
var result = db.insert(TABLE_NAME,null,cv)
if(result == -1.toLong())
Log.d("POOP", "fail score table in addition")
else
Log.d("POOP", "Success score table in addition" )
}
fun readData(): MutableList<Scores>{
var list: MutableList<Scores> = ArrayList()
val db = this.readableDatabase
val query = "Select * from $TABLE_NAME"
val result = db.rawQuery(query,null)
if (result.moveToFirst()){
do {
var score = Scores()
var id = result.getString(0).toInt()
var AvgTime = result.getString(1).toFloat()
var date = result.getString(2).toString()
list.add(score)
}while (result.moveToNext())
}
result.close()
db.close()
return list
}
}
}
我试过这个,分数类和处理程序是两个独立的类,但它产生了相同的结果。
这是我写入数据库的方式(来自 4 个单独的活动。在每个活动中,表名都不同。在这个例如它是“additionDataBase”)
val scores = Scores("%.3f".format(timeKeeper.averageNumber).toFloat())
val db = scores.DataBaseHandler(context, "additionDataBase")
db.insertData(scores)
这是我从数据库中读取的方式,该数据库在显示averageTime
每个表的不同活动中。这是其中之一的代码
val context: Context? = activity
val adb = Scores().DataBaseHandler(context!!,"additionDataBase")
val data = adb.readData()
TextViewAdScore.text = data[0].averageTime.toString() + " " + data[1].date
我想我错过了一些东西,但我似乎无法找到它是什么。
到目前为止,无论我这样做多少次。输出始终为 0.0f
解决方案
看看你在做什么readData
:
var score = Scores()
var id = result.getString(0).toInt()
var AvgTime = result.getString(1).toFloat()
var date = result.getString(2).toString()
list.add(score)
id
, AvgTime
, 和date
被检索但不以任何方式使用,所以你的代码相当于只写list.add(Scores())
. (旁注:没有理由让他们成为var
,以及为什么与其他人之间的大小写不一致AvgTime
?)
推荐阅读
- checkbox - Latex 中的交互式复选框
- node.js - npm 安装 package.json 中的依赖项子集
- cdn - CDN 和桶查询
- python - 将表与熊猫中的索引列合并
- sql - 查询 SCCM 应用程序
- sql - 如何在表中找到大于引用它的所有值的特定值?
- byte-buddy - 在 ByteBuddy 中执行循环类型
- django - Firestore 文档不包含任何数据
- c# - autoMapper 相关错误,在 lambda_method19(Closure , Head , Head , ResolutionContext )
- python - event.keycode 在 python 中不工作 tkinter