【问题标题】:Flutter SQFlite one to many relationship setupFlutter SQFlite 一对多关系设置
【发布时间】:2019-10-21 05:27:48
【问题描述】:

我正在创建一个应用程序并需要一个数据库。该数据库包含一个位置表和兴趣点表。
这是一对多的关系。
一个地点有多个兴趣点。
现在我尝试用 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);

【问题讨论】:

    标签: android sql flutter dart sqflite


    【解决方案1】:

    看来你需要自己在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);
    

    【讨论】:

      【解决方案2】:

      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"
                ")");
      }
      

      【讨论】:

        【解决方案3】:

        看看这里reference

        使用外键创建表和 SQL 关系

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-12-20
            • 1970-01-01
            • 2013-05-13
            • 2018-04-25
            • 1970-01-01
            • 2019-05-06
            • 2023-03-20
            相关资源
            最近更新 更多