带Ansi 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[无此类表格:跑道]中出错 数据库中肯定有跑道表。有人能帮我澄清一下吗?代码如下:带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[无
最有可能的是,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;
}