首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果试图打开不存在的文件,sqlite3_open不会返回错误。

如果试图打开不存在的文件,sqlite3_open不会返回错误。
EN

Stack Overflow用户
提问于 2017-09-06 10:33:31
回答 1查看 1.8K关注 0票数 3
代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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标志。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46073011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档