为什么我的sqlite3文件永远不会被创建?

时间:2015-01-27 19:45:05

标签: c xcode sqlite

我试图在Xcode中创建一个sqlite3数据库。

以下是我使用的代码:

#include <stdlib.h>
#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
    printf("called here");
    return 0;
}

int main(int argc, const char * argv[]) {
    sqlite3 *db;
    char *zErrMsg = 0;
    int result = sqlite3_open("noodle.sqlite3", &db);

    if (result != SQLITE_OK) {
        printf("did not work\n");
        exit(0);
    }

    char *sql = "CREATE TABLE TEST (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL);";
    result = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

    if (result != SQLITE_OK) {
        printf("heya");
        exit(0);
    }

    char *sql2 = "INSERT INTO TEST VALUES (3, 'NEATO');";
    result = sqlite3_exec(db, sql2, callback, 0, &zErrMsg);

    if (result != SQLITE_OK) {
        printf("dangit");
        exit(0);
    }

    const char* data = "Callback function called";
    char *sql3 = "SELECT * FROM TEST;";
    result = sqlite3_exec(db, sql3, callback, (void *)data, &zErrMsg);

    return 0;
}

我跟随this tutorial。但我拥有main.c文件的目录从未看到noodle.sqlite3文件的创建。

我做错了什么?我认为sqlite3_open创建数据库(如果已经存在的话)。

1 个答案:

答案 0 :(得分:2)

除非您看到错误消息,否则 可能创建该文件,但可能不是您正在寻找的位置。

因为您没有指定放置文件的文件夹,所以该文件通常位于“当前工作目录”中。如果从终端窗口运行它,那将是您运行它的任何文件夹。如果您是从Xcode运行的,那么“当前工作文件夹”可以是放置可执行产品的文件夹,您可以通过右键单击“产品”并选择“在Finder中显示”来识别:

enter image description here

我也看到它在Documents文件夹中创建文件。

最重要的是,如果您没有看到该文件,请使用Finder的搜索功能搜索您的Mac并查找“name:noodle”,您应该会找到它。

坦率地说,我会从过程中消除歧义,并明确告诉它将文件保存在文档文件夹中:

NSString *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [documents stringByAppendingPathComponent:@"noodle.sqlite3"];

sqlite3 *db;
char *zErrMsg = 0;
int result = sqlite3_open([path UTF8String], &db);