c - 为什么我的 sqlite3 文件从未被创建?

标签 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 会创建数据库。

最佳答案

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

因为你没有指定文件应该放在哪个文件夹中,所以文件一般会在“当前工作目录”中。如果您从终端窗口运行它,那将是您从中运行它的任何文件夹。如果您从 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);

关于c - 为什么我的 sqlite3 文件从未被创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28178676/

相关文章:

android - 语法错误sqlite内部联接

当我分支我的项目 (Xcode 4.2) 时,iOS 方案丢失

c - 对 `fill_server_address' 的 undefined reference collect2 : ld returned 1 exit status

c - Apache模块开发,请求变量的正确存储方式

c - 了解高效的 CRC-CCITT-16 实现

cocoa - NSCollectionView 与部分 - 就像在 iPhoto 中一样

iOS 在现有应用程序的基础上构建应用程序扩展。如何避免代码重复?

sqlite - 安卓 : Populating a GridtView from the SQLite Database

iphone - sqlite 插入在 xcode 模拟器上工作但不在 iphone 上工作

java - JNI - native 方法中的 fatal error : Bad global or local ref passed to JNI