int main(int argc,char **argv){
int rc
sqlite3 *db;
rc = sqlite3_open(argv[1], &db);
printf("rc = %d\n", rc);
if(rc){
printf("Not Valid Database\n");
sqlite3_close(db);
exit(1);
}如果我使用./test exsisting_database.sqlite3运行这个程序,它将按预期返回0。但是对于./test not_exsisting_database.sqlite3,它仍然返回0并创建文件not_exsisting_database.sqlite3
发布于 2017-09-06 14:48:19
从关于打开数据库的SQLite文档中可以找到:https://sqlite.org/c3ref/open.html
sqlite3_open_v2()接口的工作方式类似于sqlite3_open(),只不过它接受两个额外的参数来对新的数据库连接进行附加控制。sqlite3_open_v2()的标志参数可以采用以下三个值之一,可选择地与SQLITE_OPEN_NOMUTEX、SQLITE_OPEN_FULLMUTEX、SQLITE_OPEN_SHAREDCACHE、SQLITE_OPEN_PRIVATECACHE和/或SQLITE_OPEN_URI标志组合: SQLITE_OPEN_READONLY数据库以只读模式打开.如果数据库不存在,则返回错误。 SQLITE_OPEN_READWRITE打开数据库,以便在可能的情况下进行读写,或者只有在文件被操作系统保护时才能读取。在任何一种情况下,数据库都必须已经存在,否则将返回错误。 SQLITE_OPEN_READWRITE \ SQLITE_OPEN_CREATE数据库是为读和写打开的,如果数据库还不存在,则创建它。--这是经常用于sqlite3_open()和sqlite3_open16().的行为
因此,您需要使用sqlite3_open_v2()而不是sqlite3_open(),而不是使用SQLITE_OPEN_CREATE标志。
https://stackoverflow.com/questions/46073011
复制相似问题