SQLite с Ansi C и xCode - PullRequest
       2

SQLite с Ansi C и xCode

1 голос
/ 30 июня 2011

Я начинаю изучать разработку iPad после 15 лет работы с Cold Fusion.Я чувствую себя комфортно с Ansi C и xCode, но сделаю следующий шаг с SQLite.

Я создал базу данных (airport.sqlite) с razorSQL и установил ее в тот же каталог, что и main.c, где также установил объединенные файлы sqlite3.h и sqlite3.h.

Все компилируется нормально, но при запуске я получаю следующее сообщение ...

Ошибка в операторе выбора select Длина из порядка ВПП по предельной длине 5 [нет такой таблицы: ВПП].

В базе данных определенно есть таблица Runways.Может кто-нибудь поправить меня?Вот код:


#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;
}

1 Ответ

1 голос
/ 30 июня 2011

Скорее всего, файл "airport.sqlite", открытый в main (), не тот, который вам кажется.Без информации о пути sqlite3_open () просто откроет файл в текущем рабочем каталоге.

В качестве шага отладки добавьте «printf (getwd (NULL))» непосредственно перед оператором sqlite3_open ().Тогда вы узнаете, открываете ли вы свою существующую базу данных или просто создаете новую, пустую, в которой отсутствует таблица.

Кроме того, поскольку вы используете XCode, вы можете просто передать путь к своейбаза данных как параметр командной строки (argv).В Xcode 4 выберите Product-> Edit Scheme.В разделе «Выполнить» добавьте путь к «Передача аргументов при запуске».Затем вы можете просто передать argv [1] в sqlite3_open ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...