我從自下而上開始學習15年Cold Fusion後的iPad開發。我對Ansi C和xCode感到滿意,但是我很難用SQLite進行下一步。帶Ansi C和xCode的SQLite
我已經用razorSQL構建了一個數據庫(Airports.sqlite),並將它安裝在main.c所在的目錄中,我也安裝了合併的sqlite3.h和sqlite3.h文件。
一切編譯OK,但我得到當我運行下面的消息...
錯誤從跑道爲了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;
}
保存後請看看你的問題,看看你是否可以閱讀 - 在這種情況下代碼需要格式化爲代碼 – Mark