Sqlite C пользовательская функция - PullRequest
0 голосов
/ 29 января 2009

Я использую API sqlite C.
«Все» запускается в основной функции (переменные, открыть, выполнить запрос, закрыть базу данных и т. Д.) Кроме того, я хотел бы теперь создать отдельные пользовательские функции, где я делаю, например, сортировку в базе данных.

Каков наилучший способ передачи объектов и переменных БД из main в эту новую функцию? Создать их всех как глобалы? Передать по ссылке? Это то, для чего предназначена функция Sqlite3_create_function?

Пожалуйста, дайте мне знать, как я могу уточнить этот вопрос при необходимости.

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 января 2009

Передайте указатель sqlite3 * db в качестве аргумента вашей функции.

Или используйте обратные вызовы, как указано в руководстве по быстрому запуску

1 голос
/ 30 января 2009

sqlite3_create_function принимает аргумент void *pApp. Предполагается, что это указывает на данные для использования вашей функцией. Указатель хранится в контексте управляемой функции SQLite. Вы получаете этот указатель обратно из пользовательской функции, используя sqlite3_user_data. Поскольку вы распределяете память, вы можете поделиться ею между вашим приложением и функцией.

Этот механизм не намного сложнее, чем использование глобальных переменных, и поддерживает многопоточные приложения, если вы решите сделать это позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...