Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在SQLite中创建用户定义的函数?_Android_Sqlite_User Defined Functions - Fatal编程技术网

Android 如何在SQLite中创建用户定义的函数?

Android 如何在SQLite中创建用户定义的函数?,android,sqlite,user-defined-functions,Android,Sqlite,User Defined Functions,我正在用android开发一个应用程序,我需要在sqlite中创建一个udf。可以在sqlite中创建它吗?如果是,如何做到这一点?SQLite不支持Oracle或MS SQL Server那样的用户定义函数。对于SQLite,必须在C/C++中创建一个回调函数,并使用该调用连接该函数 不幸的是,Android的SQLite API不允许通过Java直接调用sqlite3\u create\u函数。为了让它工作,您需要使用编译 如果你仍然感兴趣,请阅读 下面介绍如何创建一个查找字符串第一个字节的

我正在用android开发一个应用程序,我需要在sqlite中创建一个udf。可以在sqlite中创建它吗?如果是,如何做到这一点?

SQLite不支持Oracle或MS SQL Server那样的用户定义函数。对于SQLite,必须在C/C++中创建一个回调函数,并使用该调用连接该函数

不幸的是,Android的SQLite API不允许通过Java直接调用
sqlite3\u create\u函数。为了让它工作,您需要使用编译

如果你仍然感兴趣,请阅读

下面介绍如何创建一个查找字符串第一个字节的函数

static void firstchar(sqlite3_context *context, int argc, sqlite3_value **argv)
{
    if (argc == 1) {
        char *text = sqlite3_value_text(argv[0]);
        if (text && text[0]) {
          char result[2]; 
          result[0] = text[0]; result[1] = '\0';
          sqlite3_result_text(context, result, -1, SQLITE_TRANSIENT);
          return;
        }
    }
    sqlite3_result_null(context);
}
然后将函数附加到数据库

sqlite3_create_function(db, "firstchar", 1, SQLITE_UTF8, NULL, &firstchar, NULL, NULL)
最后,在sql语句中使用该函数

SELECT firstchar(textfield) from table

一个非常简洁的例子。但是,您选择编写的示例将返回UTF-8字符串的第一个字节,而不是第一个字符,UTF-8字符串不一定是有效的Unicode值。以防有人复制我的一个项目的逐字记录。@Michael。。。我下载了NDK,通过Eclipse为项目启用了本机支持,并添加了sqlite.c。我将自定义函数添加到一个单独的文件中,而不是sqlite.c。尽量不要修改sqlite.c文件。请记住,本机sqlite库与Java sqlite库不同。因此,在本机C/C++代码中定义的任何sqlite函数在Java中都不可用。@jojaba您能告诉我您将
sqlite3\u create\u函数(db,“firstchar”,1,sqlite\u UTF8,NULL,&firstchar,NULL,NULL)放在哪里了吗?
语句(在sqlite.C文件中;如果没有,您如何在单独的文件中声明
db
)?@shashwat Add sqlite3_在sqlite.C的单独C文件中打开。如何添加C文件。SQLite管道。您将使用NDK将本机方法导出到Java。@user1404930您将需要使用JNI/NDK。这个答案中有几个链接可以帮助你开始。网上有很多关于如何从Java与C交互的例子,反之亦然。顺便说一句-为什么不使用其他函数重新编译sqlite?关于如何在Java中实现这一点,有一个很好的描述,无需使用NDK编译sqlite C模块,at(使用SQLiteOpenHelper)。