C 如果试图打开不存在的文件,sqlite3_open不会返回错误
如果我使用C 如果试图打开不存在的文件,sqlite3_open不会返回错误,c,database,sqlite,C,Database,Sqlite,如果我使用/test existing\u database.sqlite3运行此命令,它将按预期返回0。但是使用/test not_existing_database.sqlite3时,它仍然返回0,并从打开数据库时的SQLite文档中创建文件not_existing_database.sqlite3,可在此处找到: sqlite3\u open\u v2()接口的工作原理类似于sqlite3\u open(),除了 它接受两个附加参数,用于对 新的数据库连接。sqlite3_open_v2
/test existing\u database.sqlite3
运行此命令,它将按预期返回0
。但是使用/test not_existing_database.sqlite3
时,它仍然返回0
,并从打开数据库时的SQLite文档中创建文件not_existing_database.sqlite3
,可在此处找到:
sqlite3\u open\u v2()接口的工作原理类似于sqlite3\u open(),除了
它接受两个附加参数,用于对
新的数据库连接。sqlite3_open_v2()的flags参数可以
取以下三个值之一,可以选择与
SQLITE\u OPEN\u NOMUTEX、SQLITE\u OPEN\u FULLMUTEX、SQLITE\u OPEN\u SHAREDCACHE、,
SQLITE_OPEN_PRIVATECACHE和/或SQLITE_OPEN_URI标志:
SQLITE_OPEN_READONLY以只读模式打开数据库。如果
数据库不存在,返回错误
SQLITE_OPEN_READWRITE打开数据库进行读写
如果可能,或者仅当文件受
操作系统。无论哪种情况,数据库必须已经存在,
否则将返回一个错误
SQLITE_OPEN_READWRITE | SQLITE_OPEN_创建为其打开的数据库
读和写,如果还不存在,则创建。
这是sqlite3\u open()和sqlite3\u open16()始终使用的行为。
因此,您需要使用不带SQLITE\u open\u CREATE标志的sqlite3\u open\u v2(),而不是sqlite3\u open()如果未找到,则创建数据库是
sqlite3\u open
的设计意图。看看sqlite3\u open\u v2
,它接受标志,如果数据库文件不存在,将返回错误代码。
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);
}