我要在sqlite3创建的表中添加2个数据,判断其中一个数据相同时就退出,使用C语言
时间: 2024-02-05 09:13:19 浏览: 110
C sqlite3 数据库
可以使用以下步骤:
1. 打开数据库连接,使用 `sqlite3_open()` 函数。
2. 准备 SQL 语句,使用 `sqlite3_prepare_v2()` 函数。
3. 绑定参数,使用 `sqlite3_bind_*()` 函数。
4. 执行 SQL 语句,使用 `sqlite3_step()` 函数。
5. 处理结果,使用 `sqlite3_column_*()` 函数。
6. 关闭语句,使用 `sqlite3_finalize()` 函数。
7. 关闭数据库连接,使用 `sqlite3_close()` 函数。
具体代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
int main(void) {
sqlite3 *db;
char *errmsg;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return EXIT_FAILURE;
}
const char *sql = "CREATE TABLE IF NOT EXISTS mytable ("
" id INTEGER PRIMARY KEY,"
" data1 TEXT,"
" data2 TEXT"
");";
rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to create table: %s\n", errmsg);
sqlite3_free(errmsg);
sqlite3_close(db);
return EXIT_FAILURE;
}
const char *data1 = "hello";
const char *data2 = "world";
sql = "INSERT INTO mytable (data1, data2) VALUES (?, ?);";
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to prepare statement: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return EXIT_FAILURE;
}
sqlite3_bind_text(stmt, 1, data1, strlen(data1), SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, data2, strlen(data2), SQLITE_TRANSIENT);
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Failed to insert data: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
sqlite3_close(db);
return EXIT_FAILURE;
}
sqlite3_finalize(stmt);
sql = "SELECT id, data1, data2 FROM mytable WHERE data1 = ? OR data2 = ?;";
rc = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to prepare statement: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return EXIT_FAILURE;
}
sqlite3_bind_text(stmt, 1, data1, strlen(data1), SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, data2, strlen(data2), SQLITE_TRANSIENT);
while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const char *data1 = (const char *) sqlite3_column_text(stmt, 1);
const char *data2 = (const char *) sqlite3_column_text(stmt, 2);
printf("id=%d, data1=%s, data2=%s\n", id, data1, data2);
if (strcmp(data1, "hello") == 0 || strcmp(data2, "world") == 0) {
break;
}
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return EXIT_SUCCESS;
}
```
这段代码创建一个名为 `mytable` 的表,该表有三个字段:`id`、`data1` 和 `data2`。然后向表中插入一条数据,其中 `data1` 为 `hello`,`data2` 为 `world`。接着查询表中所有数据,如果 `data1` 或 `data2` 等于 `hello` 或 `world`,就退出循环。这里使用 `strcmp()` 函数比较字符串是否相等。
阅读全文