带Ansi C和xCode的SQLite

带Ansi C和xCode的SQLite,c,xcode,sqlite,C,Xcode,Sqlite,在使用Cold Fusion 15年后,我开始从下到上学习iPad的开发。我对ANSIC和xCode已经很熟悉了,但在SQLite的下一步工作中却遇到了困难 我用razorSQL构建了一个数据库Airports.sqlite,并将其安装在main.c的同一目录中,在该目录中我还安装了合并的sqlite3.h和sqlite3.h文件 一切编译正常,但我运行时收到以下消息 select语句select Length from RUNNAY order by Length desc limit 5[无

在使用Cold Fusion 15年后,我开始从下到上学习iPad的开发。我对ANSIC和xCode已经很熟悉了,但在SQLite的下一步工作中却遇到了困难

我用razorSQL构建了一个数据库Airports.sqlite,并将其安装在main.c的同一目录中,在该目录中我还安装了合并的sqlite3.h和sqlite3.h文件

一切编译正常,但我运行时收到以下消息

select语句select Length from RUNNAY order by Length desc limit 5[无此类表格:跑道]中出错

数据库中肯定有跑道表。有人能帮我澄清一下吗?代码如下:


最有可能的是,main中打开的文件Airports.sqlite并不是您认为的那个文件。如果没有路径信息,sqlite3_open将只打开当前工作目录中的文件

作为调试步骤,在sqlite3_open语句之前添加printfgetwdNULL。然后,您将知道是打开现有数据库,还是只是创建一个缺少表的新的空数据库


另外,由于您使用的是Xcode,因此只需将数据库的路径作为命令行参数argv传递即可。在Xcode 4中,选择产品->编辑方案。在“运行”部分,将路径添加到启动时传递的参数。然后您可以将argv[1]传递给您的sqlite3\u open。

最有可能的是,main中打开的Airports.sqlite文件不是您认为的文件。如果没有路径信息,sqlite3_open将只打开当前工作目录中的文件

作为调试步骤,在sqlite3_open语句之前添加printfgetwdNULL。然后,您将知道是打开现有数据库,还是只是创建一个缺少表的新的空数据库


另外,由于您使用的是Xcode,因此只需将数据库的路径作为命令行参数argv传递即可。在Xcode 4中,选择产品->编辑方案。在“运行”部分,将路径添加到启动时传递的参数。然后,您可以将argv[1]传递给您的sqlite3\u open。

请在保存问题后查看您的问题,并查看您是否可以阅读它-在这种情况下,代码需要格式化为代码请在保存问题后查看您的问题,并查看您是否可以阅读它-在这种情况下,代码需要格式化为代码谢谢。这看起来是个问题。我正在慢慢整理。谢谢。这看起来是个问题。我正在慢慢整理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"
#include "weightbalance.h"

sqlite3* db;
int first_row;

int select_callback(void *p_data, int num_fields, char **p_fields, char **p_col_names) {

    int i;
    int *p_rn = (int*)p_data;

    if (first_row) {
        first_row = 0;

        for(i=0; i < num_fields; i++) {
            printf("%20s", p_col_names[i]);
        }
        printf("\n");
        for(i=0; i< num_fields*20; i++) {
            printf("=");
        }
        printf("\n");
    }

    (*p_rn)++;

    for(i=0; i < num_fields; i++) {
        printf("%20s", p_fields[i]);
    }

    printf("\n");
    return 0;
}


void select_stmt(const char* stmt) {
    char *errmsg;
    int   ret;
    int   nrecs = 0;

    first_row = 1;

    ret = sqlite3_exec(db, stmt, select_callback, &nrecs, &errmsg);

    if(ret!=SQLITE_OK) {
        printf("Error in select statement %s [%s].\n", stmt, errmsg);
    }
    else {
        printf("\n   %d records returned.\n", nrecs);
    }
}

void sql_stmt(const char* stmt) {
    char *errmsg;
    int   ret;

    ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);

    if(ret != SQLITE_OK) {
        printf("Error in statement: %s [%s].\n", stmt, errmsg);
    }
}

int main() {
    sqlite3_open("Airports.sqlite", &db);

    if(db == 0) {
        printf("Could not open database.");
        return 1;
    }

    printf("\nSelecting Airports with the longest runways.\n\n");
    select_stmt("select Length from Runways order by Length desc limit 5");

    sqlite3_close(db);
    return 0;
}