8

我正在创建一个应用程序并需要一个数据库。该数据库包含位置表和兴趣点表。
这是一对多的关系。
一个位置有几个兴趣点。
现在我尝试用 sqflite 来做这种关系,但失败了。我已经尝试添加外键,但它不起作用。
这只是代码中最重要的部分。

static final String locationTable = 'location';
static final String columnLocationId = 'id';
static final String columnLocationTitle = 'title';  

static final String pointOfInterestTable = 'point_of_interest';
static final String columnPointOfInterestId = 'id';
static final String columnPointOfInterestTitle = 'title';

static final String createTableLocation = 'CREATE TABLE $locationTable('
    '$columnLocationId INTEGER PRIMARY KEY AUTOINCREMENT,'
    '$columnLocationTitle TEXT NOT NULL)';

static final String createTableLocation = 'CREATE TABLE $pointOfInterestTable('
    '$columnPointOfInterestId INTEGER PRIMARY KEY AUTOINCREMENT,'
    '$columnPointOfInterestTitle TEXT NOT NULL)';

Future<List> getPointOfInterestsOfLocations(int id) async {
    final db = await this.db;
    final maps = await db.query(
      locationTable,
      where: '$columnLocationId = ?',
      whereArgs: [id],
    );
    return maps.toList();
}

这是将其加载到列表中的代码行:

List pointOfViews = await _pointOfViewDb.getPointOfInterestsOfLocations(id: location.id);
4

4 回答 4

17

看来您需要自己在 sqlite 中启用外键支持。

在 sqflite 中,您可以像这样定义一个函数:

static Future _onConfigure(Database db) async {
    await db.execute('PRAGMA foreign_keys = ON');
}

并将其添加到您的 openDatabase 函数中,如下所示:

openDatabase(version: _databaseVersion, onCreate: _onCreate,
             onUpdate: _onUpdate, onDelete: _onDelete,
             onConfigure: _onConfigure);
于 2019-11-17T15:07:10.680 回答
3

SQFlite(Flutter)中的外键关系可以如下完成,

 createTable() async{
  final db = await database;
  var raw = await db.execute("CREATE TABLE MarketInfoes ("
          "id integer primary key, userId integer, typeId integer,"
          "gradeId integer, price DOUBLE" 
          "FOREIGN KEY (typeId) REFERENCES Type (id) ON DELETE NO ACTION ON UPDATE NO ACTION," 
          "FOREIGN KEY (userId) REFERENCES User (id) ON DELETE NO ACTION ON UPDATE NO ACTION," 
          "FOREIGN KEY (gradeId) REFERENCES Grade (id) ON DELETE NO ACTION ON UPDATE NO ACTION"
          ")");
}
于 2019-12-07T09:39:24.327 回答
1

看看这里这个参考

使用外键创建表和 SQL 关系

于 2020-04-08T16:49:13.443 回答
1

当您需要使用 FOREIGN KEY 时,您必须将 INTEGER 引用放在同一个 sql 队列中

于 2020-05-26T13:52:22.780 回答