0

我在 android kotlin 中的数据库有问题。每次我尝试使用它时,它总是说没有这样的桌子。但我已经做了桌子。

这是我的数据库打开助手

    class MyDatabaseOpenHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "FavoriteTeam.db", null, 1) {
    companion object {
        private var instance: MyDatabaseOpenHelper? = null

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

    override fun onCreate(db: SQLiteDatabase?) {
        // Here you create tables

        db?.createTable(FavoriteTeam.TABLE_TEAM, true,
                FavoriteTeam.ID to INTEGER + PRIMARY_KEY + AUTOINCREMENT,
                FavoriteTeam.TEAM_ID to TEXT + UNIQUE,
                FavoriteTeam.TEAM_NAME to TEXT,
                FavoriteTeam.TEAM_BADGE to TEXT)

        db?.createTable(Favorite.TABLE_FAVORITE, true,
                Favorite.ID to INTEGER + PRIMARY_KEY + AUTOINCREMENT,
                Favorite.EVENT_ID to TEXT + UNIQUE,
                Favorite.HOME_ID to TEXT + UNIQUE,
                Favorite.AWAY_ID to TEXT + UNIQUE,
                Favorite.TEAM_HOME to TEXT,
                Favorite.TEAM_AWAY to TEXT,
                Favorite.TEAM_HOME_SCORE to TEXT,
                Favorite.TEAM_AWAY_SCORE to TEXT,
                Favorite.DATE to TEXT)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        // Here you can upgrade tables, as usual
        db.dropTable(Favorite.TABLE_FAVORITE, true)
        db.dropTable(FavoriteTeam.TABLE_TEAM, true)
    }
}

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

这是我的数据库数据

data class FavoriteTeam(val id: Long?, val teamId: String?, val teamName: String?, val teamBadge: String?) {

companion object {
    const val TABLE_TEAM: String = "TABLE_TEAM"
    const val ID: String = "ID_"
    const val TEAM_ID: String = "TEAM_ID"
    const val TEAM_NAME: String = "TEAM_NAME"
    const val TEAM_BADGE: String = "TEAM_BADGE"
}

}

这就是我所说的

private fun favoriteState() {
    database.use {
        val result = select(FavoriteTeam.TABLE_TEAM)
                .whereArgs("(TEAM_ID = {id})",
                        "id" to idTeam)
        val favorite = result.parseList(classParser<FavoriteTeam>())
        if (!favorite.isEmpty()) isFavorite = true
    }
}

它总是显示这个错误 no such table: TABLE_TEAM (code 1): , while compiling: SELECT * FROM TABLE_TEAM WHERE (TEAM_ID = '133604')

我不知道为什么。当我想创建表TABLE_FAVORITE时,它运行良好,但是当我想创建它时TABLE_TEAM,无论我想插入或选择什么,它总是显示什么错误。如果你知道,请帮助我。谢谢你

4

2 回答 2

1

尝试卸载应用程序并重试,因为表创建是在 OnCreate 中完成的,在应用程序的整个生命周期中只调用一次,因此新创建的表不会反映它是旧的 apk 构建还是在删除它们后再次在 onUpgrade 中重新创建表

于 2018-11-26T10:31:41.233 回答
0

OnCreate 在运行项目时基本上不会创建表,因此,删除表并运行项目。

于 2018-11-26T16:40:39.820 回答