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

如何在Flutter的sqflite中获取完整数据表结构

在Flutter的sqflite中获取完整数据表结构

要获取SQLite表的完整结构(列名、数据类型、主键、外键等),可以借助SQLite原生的PRAGMA命令,sqflite完全支持执行这些命令,具体方法如下:

获取表的基本列信息(含主键、非空约束等)

使用PRAGMA table_info(your_table_name)命令,它会返回表中每一列的详细信息,包括列名、数据类型、是否为主键、是否允许空值等。

代码示例

Future<List<Map<String, dynamic>>> getTableStructure(Database db, String tableName) async {
  return await db.rawQuery('PRAGMA table_info($tableName)');
}

// 使用方式
// 假设你已经获取了Database实例db
var tableStructure = await getTableStructure(db, 'users');
// 打印结果,每一条数据对应一列的信息
tableStructure.forEach((column) {
  print('列名: ${column['name']}, 类型: ${column['type']}, 主键: ${column['pk'] == 1 ? '是' : '否'}');
});

返回的每条数据包含以下核心字段:

  • cid: 列的索引(从0开始)
  • name: 列名
  • type: 列的数据类型
  • notnull: 是否为非空约束(1表示非空,0表示允许空)
  • dflt_value: 列的默认值
  • pk: 是否为主键(1表示主键,0表示不是)

获取外键约束信息

使用PRAGMA foreign_key_list(your_table_name)命令,可以获取该表关联的所有外键信息,包括关联的父表、父列、更新/删除规则等。

代码示例

Future<List<Map<String, dynamic>>> getForeignKeys(Database db, String tableName) async {
  return await db.rawQuery('PRAGMA foreign_key_list($tableName)');
}

// 使用方式
var foreignKeys = await getForeignKeys(db, 'orders');
foreignKeys.forEach((fk) {
  print('外键列: ${fk['from']}, 关联表: ${fk['table']}, 关联列: ${fk['to']}');
});

返回的每条数据包含以下核心字段:

  • seq: 外键中列的序号(复合外键时有用)
  • table: 关联的父表名称
  • from: 当前表中的外键列名
  • to: 父表中对应的关联列名
  • on_update: 更新父表时的触发动作(如CASCADE、RESTRICT等)
  • on_delete: 删除父表时的触发动作(如CASCADE、RESTRICT等)

批量获取所有表的完整结构

如果需要一次性获取数据库中所有表的结构,可以先通过sqlite_master获取所有表名,再遍历调用上述两个方法:

Future<Map<String, Map<String, dynamic>>> getAllTablesStructure(Database db) async {
  // 获取所有用户自定义表名(排除SQLite系统表)
  var tables = await db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'");
  
  Map<String, Map<String, dynamic>> allStructures = {};
  
  for (var table in tables) {
    String tableName = table['name'] as String;
    var columns = await getTableStructure(db, tableName);
    var foreignKeys = await getForeignKeys(db, tableName);
    
    allStructures[tableName] = {
      'columns': columns,
      'foreign_keys': foreignKeys
    };
  }
  
  return allStructures;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:13:19