首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite使用C,验证表中是否存在数据

Sqlite使用C,验证表中是否存在数据
EN

Stack Overflow用户
提问于 2015-09-06 01:14:53
回答 1查看 59关注 0票数 0

我正在用C语言和sqlite数据库构建一个应用程序。我有一个sqlite数据库,其中我存储了许多ip地址(文本)。如果用户输入了ip地址,我希望我的应用程序检查该ip是否在数据库中。我可以用Python很容易做到这一点,但我不能用C产生同样的代码。请在下面找到我的代码。

代码语言:javascript
复制
sqlite3 *db;
sqlite3_stmt *res;
int rec_count = 0;
int rc;
char *errMSG;
const char *tail;
char *ip = "192.168.10.10";
int error = sqlite3_open("C:\\botdetect\\IP.db", &db);
if (error)
{
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
}

char *sql = "SELECT * FROM ipaddress WHERE IP=?";

sqlite3_prepare_v2(db, sql, -1, &res, 0);
sqlite3_bind_text(res, 1, ip, sizeof(ip), SQLITE_STATIC);
rc = sqlite3_step(res);

printf("rc is %d\n", rc);

sqlite3_finalize(res);
EN

回答 1

Stack Overflow用户

发布于 2015-09-06 02:53:54

你收到错误了吗?你的程序崩溃了吗?您看到的行为是什么?

要进行故障排除(这几乎总是一个好主意),您应该检查sqlite3_*调用的返回值。

您可以找到结果代码here的列表。此外,您可以使用here提供的方法打印出人类可读的错误字符串。

例如,要检查sqlite3_prepare_v2()调用是否成功,可以将其更改为如下所示:

代码语言:javascript
复制
int sqlite_status;
sqlite_status = sqlite3_prepare_v2(db, sql, -1, &res, 0);
if (sqlite_status != SQLITE_OK) {
    printf("Error is: %s\n", sqlite3_errstr(sqlite_status));
}

您可以使用sqlite3_bind_text()调用和sqlite3_step()调用执行类似的操作。

可能与您所看到的问题无关的是,您定义const char *tail的目的是为了存储指向SQL语句未使用部分的指针。实际上,您从来没有将这个值传递给sqlite3_prepare_v2()函数,而是传递给0。我实际上会使用你定义的变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32415719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档