gpt4 book ai didi

c - Sqlite3、c-api、icu 归类

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:35 25 4
gpt4 key购买 nike

在一些指南的帮助下,我成功地使用 gcc 编译了 sqlite3 的 ICU 扩展并获得了 libSqliteIcu.so,没有显示任何错误。然后我将这个 lib 复制到/usr/lib 文件夹。之后,我通过终端启动 sqlite,然后“.load libSqliteIcu.so”,然后是“icu_load_collat​​ion („hr_HR“, „CROATIAN");”,所有这些都在终端上没有错误或备注。查询结果现在已正确排序。

我现在应该做什么才能通过 c-api 使用克罗地亚语排序规则?

我尝试:

sqlite3_stmt *selStmt;
const char *zSqlSelect = "SELECT sif, name, kat FROM mytable WHERE naziv LIKE 'mala%' ORDER BY naziv COLLATE CROATIAN;";
if (sqlite3_prepare_v2(db, zSqlSelect, -1, &selStmt, NULL) == SQLITE_OK )
{
int cols = sqlite3_column_count(selStmt);
int result = 0;
while(true)
{
result = sqlite3_step(selStmt);
if(result == SQLITE_ROW)
{
for(int col = 0; col < cols; col++)
{
printf("%s %s \t", sqlite3_column_name(selStmt,col), "=");
printf("%s\n", sqlite3_column_text(selStmt, col));
}
}
else break;
}
sqlite3_finalize(selStmt);
}
else
printf("db error: %s\n", sqlite3_errmsg(db));

错误信息是“db error: no such collat​​ion sequence: CROATIAN”。

我错过了什么以及如何像通过命令行一样通过 c-api 给定的排序规则获得 sqlite3 排序属性?

最佳答案

我找到了解决方案,所以这里就像一个答案。打开数据库后,应该立即穿上它,然后您可以在查询中使用排序规则名称来获得不区分大小写和正确排序的结果。尽管有克罗地亚的例子,但我认为这可以应用于 ICU 支持的所有排序规则。

    if (sqlite3_enable_load_extension(db, 1) == SQLITE_OK)
{
printf ("loading extensions enabled\n");
const char* library;

#if defined(linux)
library = "path_to/libSqliteIcu.so";
#else
library = "path_to\libSqliteIcu.dll";
#endif

if (sqlite3_load_extension(db, library, 0, 0) == SQLITE_OK)
{
sqlite3_stmt *collation;
if (sqlite3_prepare_v2(db, "SELECT icu_load_collation('hr_HR', 'CROATIAN');", -1, &collation, 0) != SQLITE_OK)
printf("db error: %s\n", sqlite3_errmsg(db));

if (collation)
sqlite3_step(collation);
else
printf("Error: collation is not loaded");

sqlite3_finalize(collation);
}
else
printf ("Error: libSqliteIcu NOT loaded\n");
}
else
printf("Error: enable_load_extension\n");

if (sqlite3_enable_load_extension(db, 0) == SQLITE_OK) printf ("loading extensions disabled\n");

所以只剩下一个相关的问题:
这样使用sqlite时,如何让LIKE搜索区分大小写?
我尝试 COLLATE BINARY,它再次不区分大小写。

关于c - Sqlite3、c-api、icu 归类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com