SQL 请求始终为空

问题描述 投票:0回答:1

我是 android-studio 的新手,正在尝试学习这个 + kotlin。 我尝试执行一个简单的 count(*) 请求,但计数始终返回 0。 我尽了一切努力。我无法找到会出现什么错误,我想我应该补充一些我不知道的东西。

  • 我的数据库放置在Main/assets上
  • 我的日志显示:成功打开数据库lvl_database
  • 我的数据库包含两行填充的行,所有内容都按照代码中的方式命名(表+列)

enter image description here


    class DatabaseHelper(context: Context) : SQLiteAssetHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
   companion object {
        private const val DATABASE_NAME = "lvl_database"
        private const val DATABASE_VERSION = 1
    }
}

class SubLevel : AppCompatActivity() {

    private lateinit var dbHelper: DatabaseHelper

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sublevel)

        dbHelper = DatabaseHelper(this)
        val db: SQLiteDatabase = dbHelper.writableDatabase

        // Utilisation de try-catch pour gérer les éventuelles exceptions
        try {
            val cursor: Cursor = db.rawQuery("SELECT COUNT(*) FROM Levels", null)
            val textView: TextView = findViewById(R.id.Sublevel_title)

            if (cursor.moveToFirst()) {
                val count = cursor.getInt(0)
                textView.text = "Nombre total de lignes dans la table Levels : $count"
                Log.d("DatabaseDebug", "Count from Levels: $count")
            } else {
                textView.text = "Aucune donnée dans la table Levels"
                Log.d("DatabaseDebug", "Cursor is empty or failed to move to first.")
            }
            cursor.close()
        } catch (e: Exception) {
            Log.e("DatabaseError", "Error accessing database: ${e.localizedMessage}")
        } finally {
            db.close()
        }
    }
}
android sql sqlite
1个回答
0
投票

你的代码没有任何问题。

  1. 复制代码。
  2. 将 TextView 添加到布局中

:-

<TextView
    android:id="@+id/Sublevel_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="TextView" />
  1. 在外部创建一个 SQlite 数据库(表级别有 3 行)并将其复制到 assets/databases 文件夹中,文件名为 lvl_database 如下

:-

  • enter image description here

然后运行应用程序会导致:-

  • enter image description here

日志包括:-

2024-05-07 14:11:27.489 I/SQLiteAssetHelper: successfully opened database lvl_database
2024-05-07 14:11:27.491 D/DatabaseDebug: Count from Levels: 3

因此,您的问题很可能与已复制到 assets/databases 文件夹中的文件有关。您可能应该将文件的副本重做到资产文件夹中,确保您已保存它并且它已将行插入到级别表中。

  • 需要检查的一件事是,没有与源数据库文件同名但以 -wal-shm 后缀的文件,就好像这些附加文件存在一样,这可能意味着数据库没有正确关闭,如果-wal文件不为空,说明有未提交的数据。

    • 举个例子,上面的演示是使用 Navicat for SQLite 完成的,这需要关闭 Navicat 本身才能将 WAL 数据提交到实际的数据库文件。
© www.soinside.com 2019 - 2024. All rights reserved.