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

Android加载SQLiteStudio导出.db文件报无表/非数据库错误如何解决

错误根因
  1. 核心错误:你将SQLiteStudio导出的SQL文本脚本(.sql格式)直接修改后缀为.db,.sql是纯文本的SQL语句文件,并非SQLite的二进制数据库文件,这就是file is not a database报错的直接原因。
  2. 查询代码逻辑错误:ExecuteQuery<T>的泛型参数需要填对应数据表的实体类,你填了数据库连接类db,同时你也没有确认数据库拷贝逻辑是否在查询前执行完成,这会导致no such table报错。
修复步骤

步骤1:正确导出SQLite数据库文件

  • 打开SQLiteStudio,连接你创建的dbs数据库,右键数据库选择「导出」,导出格式选择SQLite数据库(不要选SQL脚本格式),导出的文件本身就是.db格式,无需手动修改后缀。
  • 将导出的正确.db文件放入项目Assets文件夹,右键文件选择「属性」,设置「生成操作」为AndroidAsset,「复制到输出目录」为如果较新则复制。

步骤2:修复SecondPage中的查询代码

你的查询代码存在泛型参数错误、结果解析错误两个问题,修复后代码如下:

string dbName = "dbs.db";
string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), dbName);
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
    var cmd = new SQLite.SQLiteCommand(conn);
    // 表名Table属于SQL保留字,加反引号避免语法冲突
    cmd.CommandText = "SELECT * FROM `Table`";
    // 泛型参数填写对应表的实体类Table,而非连接类db
    var r = cmd.ExecuteQuery<Table>();
    ListView lstDB = v.FindViewById<ListView>(Resource.Id.lstDB);
    List<string> file = new List<string>();
    // 遍历查询结果拼接展示内容,不要直接对List调用ToString
    foreach (var item in r)
    {
        file.Add($"姓名:{item.Nome},城市:{item.Città},地址:{item.Indirizzo}");
    }
    lstDB.Adapter = new ArrayAdapter(Application.Context, Android.Resource.Layout.SimpleListItem1, file);
}

步骤3:确认执行顺序

在MainActivity的OnCreate生命周期方法中优先调用EstraiDB()方法,确保数据库从Assets拷贝到本地目录的操作完全完成后,再跳转至SecondPage执行查询,避免读取到未完成拷贝的损坏文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:24:02