Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果试图打开不存在的文件,sqlite3_open不会返回错误_C_Database_Sqlite - Fatal编程技术网

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);
}