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

时间:2011-10-23 15:33:16

标签: android sqlite user-defined-functions

我在android中开发一个应用程序,我需要在sqlite中创建一个udf。是否可以在sqlite中创建它?如果是的话怎么做?

2 个答案:

答案 0 :(得分:70)

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

不幸的是,Android的SQLite API不允许直接通过Java进行sqlite3_create_function调用。为了使其工作,您需要使用SQLite C library编译NDK

如果您仍然感兴趣,请阅读2.3 User-defined functions ...

以下是如何创建一个查找字符串第一个字节的函数。

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

答案 1 :(得分:0)

无效 - 请参阅评论

应该可以使用Android SDK 17中的SQLiteCustomFunction,它为您提供Java代码回调。

使用SQLiteDatabase中的addCustomFunction方法添加。

但我必须说我没有经验。