You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改DBHelper默认数据库名解决Room导出CSV表不存在报错

解决方法

1. 调整DBHelper的构造函数

你的DBHelper(继承自SQLiteOpenHelper)默认使用keystore.db作为数据库名,先修改它的构造逻辑,支持传入自定义数据库名:

class DBHelper(
    context: Context,
    dbName: String // 新增自定义数据库名参数
) : SQLiteOpenHelper(context, dbName, null, DATABASE_VERSION) {
    // 保留原默认构造(可选,兼容旧代码)
    constructor(context: Context) : this(context, "keystore.db")

    // 原有onCreate、onUpgrade等方法保持不变
}

2. 实例化DBHelper时指定目标数据库名

在导出代码中,把DBHelper()的调用改为传入你实际存储目标表的数据库名(就是你用DB Browser确认过的那个数据库):

// 替换成你的目标数据库文件名,比如"app_data.db"
val dbhelper = DBHelper(this, "app_data.db")

3. 修改后的完整导出代码示例

val dbhelper = DBHelper(this, "app_data.db")
val exportDir = File(getExternalStorageDirectory(), "")
if (!exportDir.exists()) {
    exportDir.mkdirs()
}

val file = File(exportDir, "csvname.csv")
try {
    file.createNewFile()
    val csvWrite = CSVWriter(FileWriter(file))
    val db = dbhelper.readableDatabase
    val curCSV = db.rawQuery("SELECT * FROM TableName", null)
    csvWrite.writeNext(curCSV.columnNames)
    while (curCSV.moveToNext()) {
        val arrStr = arrayOf(curCSV.getString(0), curCSV.getString(1), curCSV.getString(2))
        csvWrite.writeNext(arrStr)
    }
    csvWrite.close()
    curCSV.close()
} catch (sqlEx: Exception) {
    Log.e("MainActivity", sqlEx.message, sqlEx)
}

额外提示

如果你的项目用Room框架管理数据库,更规范的方式是通过Room的DAO接口查询数据后再写入CSV,避免直接操作SQLiteOpenHelper。但当前场景下,修改DBHelper的数据库名参数即可解决找不到表的问题。

内容的提问来源于stack exchange,提问作者Angel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:16:14