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

在Xamarin中使用SQLite如何查看数据库表及管理表结构?

Xamarin SQLite 开发问题解决方案

一、确认表是否创建 & 定位数据库文件

你当前的CreateTableAsync<Patient>()是异步调用,但构造函数里没加await,可能出现表还没创建完成就执行ReadPatients()的情况,后续可以改成异步初始化的方式(后面会讲)。

找到数据库文件

  • Android:在VS2019设备管理器选中运行的模拟器/真机,点击「文件资源管理器」,路径一般是/data/data/[你的应用包名]/databases/,找到对应的.db文件导出到本地。
  • iOS:连接设备后,打开VS的「工具」→「iOS」→「查看iOS设备文件」,进入应用沙盒的Documents目录,数据库文件通常在这里。

二、正确创建表、配置字段与外键

1. 实体类配置示例(Patient)

SQLite通过实体类特性定义表结构,常用特性如下:

public class Patient
{
    // 主键自增
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    // 自定义列名+长度限制
    [Column("PatientName")]
    [MaxLength(100)]
    public string Name { get; set; }

    // 外键:关联Doctor表的Id字段
    [ForeignKey(typeof(Doctor))]
    public int DoctorId { get; set; }

    // 导航属性(SQLite-net不会自动加载,需手动关联查询)
    public Doctor AssignedDoctor { get; set; }
}

public class Doctor
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }
}

2. 修复表创建的异步等待问题

修改Database类,用异步初始化方法确保表创建完成:

public class Database
{
    private readonly SQLiteAsyncConnection db;

    private Database(string dbPath)
    {
        db = new SQLiteAsyncConnection(dbPath);
    }

    public static async Task<Database> InitializeAsync(string dbPath)
    {
        var dbInstance = new Database(dbPath);
        // 等待所有表创建完成
        await dbInstance.db.CreateTableAsync<Patient>();
        await dbInstance.db.CreateTableAsync<Doctor>();
        return dbInstance;
    }

    public Task<List<Patient>> ReadPatients()
    {
        return db.Table<Patient>().ToListAsync();
    }

    public Task<int> UpdatePatient(Patient patient)
    {
        return db.UpdateAsync(patient);
    }
}

调用时用var db = await Database.InitializeAsync(dbPath);

3. 启用外键约束

SQLite默认关闭外键约束,初始化连接时需手动开启:

var connectionString = new SQLiteConnectionString(dbPath, true); // 第二个参数为true启用外键
db = new SQLiteAsyncConnection(connectionString);

三、可视化查看SQLite数据库内容(替代方案)

SQLite完全支持可视化管理,以下是适配VS2019的方案:

  • VS2019扩展:SQLite/SQL Server Compact Toolbox
    在VS的「扩展」→「管理扩展」里搜索安装该工具,安装后打开「视图」→「其他窗口」→「SQLite/SQL Server Compact Toolbox」,点击「Add SQLite Connection」导入本地.db文件,就能看到所有表,点击表可查看结构和数据,支持增删改查,操作逻辑和PL/SQL Developer、phpMyAdmin类似。
  • 独立工具:DB Browser for SQLite
    免费开源的跨平台工具,直接打开导出的.db文件,就能可视化管理表结构、数据,支持SQL查询编辑,操作简单直观。

四、代码方式验证表是否存在

如果暂时不想用可视化工具,可加以下代码验证:

public async Task<bool> IsPatientTableExists()
{
    var count = await db.ExecuteScalarAsync<int>(
        "SELECT count(*) FROM sqlite_master WHERE type='table' AND name='Patient'");
    return count > 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:31