在Flutter应用程序中,我需要在运行时获取SQLITE_MAX_VARIABLE_NUMBER的值(以及其他类似的限制)。SQLite的文档建议使用sqlite3_limit(),但此函数未公开/不可用。我正在使用SQFlite包。我不需要设置/改变值,只需要读取值。怎么办?
SQLITE_MAX_VARIABLE_NUMBER
sqlite3_limit()
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; } }
字符串
1条答案
按热度按时间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版本的问题:
字符串