Когда SQLite пытается получить доступ к заблокированной базе данных, по умолчанию он возвращает SQLITE_BUSY. В документации описаны способы добавления настраиваемой обработки к этому событию: http://www.sqlite.org/faq.html#q5.
Из документации я понимаю, что любая функция, которую вы вызываете и пытается написать в эту заблокированную базу данных, просто возвращает SQLITE_BUSY, и это будет вашим уведомлением о том, что база данных заблокирована.
Если вас беспокоит выполнение записи, которая не будет завершена, вы можете реализовать обратный вызов занятого обработчика (sqlite3_busy_handler) в сочетании с тайм-аутом занятости (sqlite3_busy_timeout), который будет повторять запись через x миллисекунд.
[edit] В http://www.sqlite.org/c3ref/io_methods.html, упоминается структура указателей на функции, одним из которых является xCheckReservedLock (), которая возвращает true, если файл заблокирован. В этой структуре все другие функции, связанные с блокировкой. Я не уверен в доступе к ним извне библиотеки sqlite, но это может стоить исследовать. Я думаю, что вы делаете это через этот интерфейс: http://www.sqlite.org/c3ref/file_control.html