宽字符串 SQLite 查询 C++
Wide string SQLite query in C++
我在C++工作,我正在处理一个SQLite数据库。考虑一下:
wchar_t s[] = L"This is my wide string. ĂÎȘȚÂăîșțâ";
我应该怎么做才能启动包含此字符串的查询?我看到如果我声明我的查询,例如:
char q[] = "SELECT * FROM 'mydb' WHERE 'something' LIKE '%ĂÎȘȚÂ%'";
编译器足够聪明,可以以某种方式转换这些宽字符,并且查询实际上按预期工作。但是,我应该如何声明/创建字符的查询数组以包含那些讨厌的字符?我尝试了string
及其c_str()
方法,wstring
等。
你不是用字符串连接来组合你的 SQL,不是吗?使用占位符并将字符串绑定到正确的占位符:
char q[] = "SELECT * FROM 'mydb' WHERE 'something' LIKE ?";
// ... create sqlite statement
wstring p = L"ĂÎȘȚÂăîșțâ";
sqlite3_bind_text16(stmt, 1, (L"%"+p+L"%").c_str(), -1, SQLITE_TRANSIENT);
但是,此代码仅适用于使用 UTF-16 作为宽字符串的系统,这基本上只是 Windows。建议不要使用 wchar_t
,因为它不便携。请改用窄字符 UTF-8 编码字符串。SQLite假设所有窄char
字符串都是UTF-8,即使是文件名,即使在Windows上也是如此。使用此方法,只需将文件另存为 UTF-8 而不使用 BOM,即可使原始代码正常工作。这将使字符串
char q[] = "SELECT * FROM 'mydb' WHERE 'something' LIKE '%ĂÎȘȚÂ%'";
在主要编译器(包括 MSVC 和 GCC)上编码的 UTF-8。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 查询SQLite数据库中的日期
- 如何在ArangoDb AQL查询中指定数据库
- Qt SQLite没有查询或参数计数不匹配
- 如何使用c++在VS 2019上运行SQL查询
- 从返回的顶点缓冲区查询顶点结构
- 以非特权用户身份查询 NTFS 特殊文件的元数据?
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 查询 NFS 上的提升进程间::file_lock
- Qt JSON – 从子项查询
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 无法从 Win10 中的 IDirectDraw7 查询 IDirect3D7
- 如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?
- 在子数组中查找多个查询的不同(唯一)值的数量
- DNS 查询格式标头结构中的小字节序问题
- QSql查询行受影响的结果
- C++库相关查询
- 优化使用 C++ 查询 SQLite DB 中超过 5000 万条数据记录的方式
- MongoDB 使用数组中的 OR 条件构建查询
- IAR C 编译器开关:快速查询