FireDAC 下的 Sqlite [9] - 关于排序
2023-09-11 14:20:42 时间
SQLite 内部是按二进制排序, 可以支持 ANSI; FrieDAC 通过 TFDSQLiteCollation 支持了 Unicode 排序, 并可通过其 OnCompare 事件自定义排序.
下面的例子, 测试了这两种排序的不同.
可把下面代码直接贴在空白窗体上, 以快速完成窗体设计:
代码:
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; LCode: Integer; begin {给 FDSQLiteCollation1 设定参数} FDSQLiteCollation1.DriverLink := FDPhysSQLiteDriverLink1; // FDSQLiteCollation1.CollationKind := scCompareString; //这是默认值(Unicode 不区分大小写, 在 Win 下是调用 WinAPI.CompareString); 使用其他选项需要自定义排序规则 FDSQLiteCollation1.LocaleName := 'zh-CN'; FDSQLiteCollation1.Flags := [sfIgnoreCase]; FDSQLiteCollation1.CollationName := 'MyCollation'; //下面所有的调用全要依赖这个名称 FDSQLiteCollation1.Active := True; FDConnection1.Params.Add('DriverID=SQLite'); // FDConnection1.Params.Add('OpenMode=CreateUTF8'); //这是默认值, 可选 CreateUTF16(Unicode) {建立测试表, 三个字段 str(汉字), code(汉字对应的 Unicode 值), id(添加顺序)} FDConnection1.ExecSQL('CREATE TABLE MyTable(str string(10), code integer, id integer)'); // FDConnection1.ExecSQL('CREATE TABLE MyTable(str string(10) COLLATE MyCollation, code integer, id integer)'); //用在表设计时 {添加测试数据数据} for i := 0 to 99 do begin LCode := Random($9FA5-$4E00); FDConnection1.ExecSQL('INSERT INTO MyTable(str, code, id) VALUES(:1, :2, :3)', [WideChar($4E00 + LCode), LCode, i+1]); end; FDQuery1.Open('SELECT * FROM MyTable'); //无排序 end; procedure TForm1.Button1Click(Sender: TObject); begin FDQuery1.Open('SELECT * FROM MyTable ORDER BY str'); //SQLite 内置排序 end; procedure TForm1.Button2Click(Sender: TObject); begin FDQuery1.Open('SELECT * FROM MyTable ORDER BY str COLLATE MyCollation'); //FireDAC 默认排序 end;
测试效果图:
相关文章
- SQLite 常用性能优化配置
- SQLite performance tuning
- System.Data.SQLite未能加载文件或程序集
- Android SQLite性能分析
- Android SQLite使用事务来确保所有语句都以原子方式执行及保证数据完整性一次执行多条语句示例
- Android 通过纯SQL语句操作SQLite完整示例(CRUD)
- RDBMS SQL 创建工具 | MySQL、Oracle、MariaDB、SQLsever、SQLite、PostgreSQL
- c++中关于SQLite中文乱码的解决方法
- SQLite中的SELECT子句使用通配符
- SQLite的sqlite_sequence表
- C#/Sqlite-单机Window 程序 sqlite 数据库实现
- SwiftUI iOS 精品开源项目之 02 完整播客Podcast采用网络类项目Alamofire Feedkit SQLite (教程含源码)
- Python代码库之将图片文件存在到sqlite数据库中
- SQLite学习笔记之设计数据库表的首要任务是理解数据
- SQLite学习笔记之创建软件的黄金四步和三个核心思考方向
- FireDAC 下的 Sqlite [12] - 备忘录(草草结束这个话题了)
- 工具说明书 - DB Browser for SQLite