首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未删除sqlite3 WAL/SHM文件

未删除sqlite3 WAL/SHM文件
EN

Stack Overflow用户
提问于 2015-10-17 02:58:48
回答 1查看 2.1K关注 0票数 1

我有以下代码

代码语言:javascript
运行
复制
int main(){
sqlite3 *db;
int     rc;
char filename[512];
char query[512];
char trace_string[512];
sqlite3_stmt *Stmt;
const char *zLeftover;

strcpy(filename,"/data/xcd/textdatabase/2015274/2015274_mos.sqlite");
strcpy(query,"ATTACH '/data/xcd/textdatabase/2015273/2015273_mos.sqlite' as db1");

rc = sqlite3_open_v2(filename, &db,SQLITE_OPEN_READONLY,NULL);
if (rc != SQLITE_OK) {
    sprintf(trace_string,"open_database: failed to open %s, rc=%d\n", filename, rc);
    fprintf(stdout,trace_string);
    return 0;
}
else {
    sprintf(trace_string,"open_database: %s opened rc=%d\n", filename, rc);
    fprintf(stdout,trace_string);
}

rc = sqlite3_prepare(db, query, -1, &Stmt, &zLeftover);
if (rc != SQLITE_OK) {
    sprintf(trace_string,"test: sqlite3_prepare, command=%s, rc=%d\n", query, rc);
    fprintf(stdout,trace_string);
    return rc;
}

rc = sqlite3_step(Stmt);
if ((rc != SQLITE_OK) && (rc != SQLITE_DONE) && (rc != SQLITE_ROW)) {
    sprintf(trace_string,"test: sqlite3_step, command=%s, rc=%d\n", query, rc);
    fprintf(stdout,trace_string);
    return rc;
}

rc = sqlite3_finalize(Stmt);

sprintf(trace_string,"test: sqlite3_finalize, command=%s, rc=%d\n", query, rc);
fprintf(stdout,trace_string);

rc=sqlite3_close(db);
sprintf(trace_string,"close_database: rc=%d\n", rc);
fprintf(stdout,trace_string);
return (rc);

}

我正在使用的数据库是预写日志(WAL)数据库。根据SQLite文档,shm和wal文件应在程序完成后删除。但是,在执行此程序后,这些文件仍然存在。文档说,如果程序没有干净地完成,文件可能还在那里,但我没有看到这一点。有什么见解吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-10-17 17:24:34

-shm-wal文件在checkpoint之后被删除。不能在只读数据库上执行此操作。

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

https://stackoverflow.com/questions/33177784

复制
相关文章

相似问题

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