Trong mã bên dưới, pathToNonDatabase
là đường dẫn đến tệp văn bản đơn giản, không phải là cơ sở dữ liệu sqlite thực. Tôi đã hy vọng cho sqlite3_open
để phát hiện điều đó, nhưng không (db
không phải là NULL
và result
là SQLITE_OK
). Vì vậy, làm thế nào để phát hiện rằng một tập tin không phải là một cơ sở dữ liệu sqlite hợp lệ?Cách để biết tệp cơ sở dữ liệu sqlite có hợp lệ hay không
sqlite3 *db = NULL;
int result = sqlite3_open(pathToNonDatabase, &db);
if((NULL==db) || (result!=SQLITE_OK)) {
// invalid database
}
"pragma schema_version;" ném "cơ sở dữ liệu bị khóa" lỗi đôi khi. Tôi sẽ cung cấp cho "pragma quick_check;" a try –
Nếu cơ sở dữ liệu của bạn bị khóa, nó bị khóa. Mọi thứ sẽ thất bại. Hãy thử lại khi nó không bị khóa. :) –
Bạn nói đúng. Mọi thứ đều thất bại khi cơ sở dữ liệu bị khóa. Ngay cả lựa chọn. Trong trường hợp của tôi, tôi muốn xác định xem tệp có phải là một cơ sở dữ liệu Sqlite3 hay không. Nếu tôi nhận được "cơ sở dữ liệu bị khóa" lỗi Tôi nghĩ rằng nó là an toàn để giả định tập tin là một cơ sở dữ liệu Sqlite3. –