Как я могу создать пользовательскую функцию в SQLite? - PullRequest
34 голосов
/ 23 октября 2011

Я разрабатываю приложение в Android, и мне нужно создать UDF в sqlite.Возможно ли создать его в sqlite?И если да, то как это сделать?

Ответы [ 2 ]

70 голосов
/ 27 ноября 2011

SQLite не поддерживает пользовательские функции так, как Oracle или MS SQL Server.Для SQLite необходимо создать функцию обратного вызова в C / C ++ и подключить функцию с помощью вызова sqlite3_create_function .

К сожалению, API-интерфейс SQLite для Android не допускает sqlite3_create_functionзвоните напрямую через Java.Чтобы заставить его работать, вам нужно скомпилировать библиотеку SQLite C с NDK .

А если вам все еще интересно, прочитайте 2.3 Пользовательские функции ...

Вот как создать функцию, которая находит первый байт строки.

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
0 голосов
/ 16 января 2014

Недействительно - см. Комментарии

Это может быть возможно с SQLiteCustomFunction из Android SDK 17, которая обеспечивает обратный вызов в коде Java.

Добавить с помощью addCustomFunction метода в SQLiteDatabase .

Но я должен сказать, что у меня нет с этим опыта.

...