如何使用SQFlite获取SQLITE_MAX_VARIABLE_NUMBER?

xyhw6mcr  于 2023-08-06  发布在  SQLite
关注(0)|答案(1)|浏览(133)

在Flutter应用程序中,我需要在运行时获取SQLITE_MAX_VARIABLE_NUMBER的值(以及其他类似的限制)。
SQLite的文档建议使用sqlite3_limit(),但此函数未公开/不可用。我正在使用SQFlite包。我不需要设置/改变值,只需要读取值。怎么办?

snvhrwxg

snvhrwxg1#

您可以使用sqlite3_limit()设置限制,而不是获取限制(如这里所写)。这里写着:
为了防止过多的内存分配,主机参数号的最大值为SQLITE_MAX_VARIABLE_NUMBER,对于3.32.0(2020-05-22)之前的SQLite版本,默认值为999,对于3.32.0之后的SQLite版本,默认值为32766。
我通过根据以下数据阅读Android API版本来避免这个问题:
| Android版本|Sqlite版本| Sqlite Version |
| --|--| ------------ |
| 十二个|3.32.2| 3.32.2 |
| 十一个|3.28.0| 3.28.0 |
| 十个|3.22.0| 3.22.0 |
| 九个|3.22.0| 3.22.0 |
所以我用sqlite3包解决了阅读Android API版本的问题:

import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';

class DbHelper {
  DbHelper();

  Future<int> getSqliteMaxVariableNumber() async {

    int sqliteMaxVariableNumber = 32766;

    if (Platform.isAndroid) {
      var deviceInfo = DeviceInfoPlugin();
      var androidDeviceInfo = await deviceInfo.androidInfo;
      int sdkVersion = androidDeviceInfo.version.sdkInt;
      if (sdkVersion < 31) {
        sqliteMaxVariableNumber = 999;
      }
    }

    return sqliteMaxVariableNumber;
  }
}

字符串

相关问题