如何修改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
相关产品推荐
相关产品推荐

