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
答案 0 :(得分:2)
从打开数据库的SQLite文档中找到: https://sqlite.org/c3ref/open.html
sqlite3_open_v2()界面的工作方式类似于 sqlite3_open(),但 它接受两个额外的参数来进行额外的控制 新的数据库连接。 sqlite3_open_v2()的flags参数可以 取以下三个值之一,可选择与 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()的行为。
所以你需要使用没有SQLITE_OPEN_CREATE标志的sqlite3_open_v2()而不是sqlite3_open()