Je développe une application en Android et j'ai besoin de créer un udf dans sqlite. Est-il possible de le créer dans sqlite? Et si oui comment faire?
SQLite ne prend pas en charge les fonctions définies par l'utilisateur comme Oracle ou MS SQL Server. Pour SQLite, vous devez créer une fonction de rappel en C/C++ et connecter la fonction à l'aide de l'appel sqlite3_create_function .
Malheureusement, l'API SQLite pour Android ne permet pas le sqlite3_create_function
appeler directement via Java. Pour le faire fonctionner, vous devrez compiler le bibliothèque SQLite C avec le NDK .
Et si vous êtes toujours intéressé, lisez 2.3 Fonctions définies par l'utilisateur ...
Voici comment créer une fonction qui trouve le premier octet d'une chaîne.
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);
}
Attachez ensuite la fonction à la base de données.
sqlite3_create_function(db, "firstchar", 1, SQLITE_UTF8, NULL, &firstchar, NULL, NULL)
Enfin, utilisez la fonction dans une instruction sql.
SELECT firstchar(textfield) from table
Non valide - voir commentaires
Cela devrait être possible avec SQLiteCustomFunction from Android SDK 17 qui vous fournit un rappel dans Java code.
Ajoutez avec la méthode addCustomFunction
dans SQLiteDatabase .
Mais je dois dire que je n'en ai pas fait l'expérience.