我在android中开发一个应用程序,我需要在sqlite中创建一个udf。是否可以在sqlite中创建它?如果是的话怎么做?
答案 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
方法添加。
但我必须说我没有经验。