gpt4 book ai didi

c - Sqlite用C,验证数据是否存在于表中

转载 作者:行者123 更新时间:2023-11-30 17:11:14 25 4
gpt4 key购买 nike

我正在使用 sqlite 数据库用 C 语言构建一个应用程序。我有一个 sqlite 数据库,其中存储了许多 IP 地址(文本)。如果用户输入 IP 地址,我希望我的应用程序检查该 IP 是否在数据库内。我可以使用 Python 轻松完成此操作,但无法在 C 中生成相同的结果。请在下面找到我的代码。

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);

最佳答案

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

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

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

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

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。我实际上会使用您定义的变量。

关于c - Sqlite用C,验证数据是否存在于表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com