4
社区成员




#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db;
int rc;
// 打开数据库
rc = sqlite3_open(":memory:", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
return 1;
}
// 创建表
const char *createTableSQL = "CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, date TEXT);";
rc = sqlite3_exec(db, createTableSQL, 0, 0, 0);
if (rc != SQLITE_OK) {
fprintf(stderr, "无法创建表: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
// 模拟要插入的日期数据
const char *dates[] = {"2023-01-01", "2023-02-15", "2023-03-10", "2023-04-20"};
// 按日期顺序插入数据
const char *insertSQL = "INSERT INTO students (name, date) VALUES ('John', ?);";
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, insertSQL, -1, &stmt, 0);
if (rc != SQLITE_OK) {
fprintf(stderr, "无法准备插入语句: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
int i;
for (i = 0; i < 4; i++) {
// 绑定日期参数
rc = sqlite3_bind_text(stmt, 1, dates[i], -1, SQLITE_STATIC);
if (rc != SQLITE_OK) {
fprintf(stderr, "无法绑定参数: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
sqlite3_close(db);
return 1;
}
// 执行插入语句
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "无法执行插入语句: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
sqlite3_close(db);
return 1;
}
// 重置语句以进行下一次循环
sqlite3_reset(stmt);
}
// 释放语句对象和关闭数据库连接
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
-- 创建表格
CREATE TABLE IF NOT EXISTS my_table (
id INTEGER PRIMARY KEY,
date TEXT,
data TEXT
);
-- 要插入的数据
-- 以下数据按照日期顺序排列
-- 修改数据和日期以适应你的需求
INSERT INTO my_table (date, data) VALUES ('2023-01-01', '数据 1');
INSERT INTO my_table (date, data) VALUES ('2023-01-03', '数据 2');
INSERT INTO my_table (date, data) VALUES ('2023-01-02', '数据 3');
-- 查询并按日期顺序返回数据
SELECT * FROM my_table ORDER BY date;
-- 使用循环按日期顺序插入数据
BEGIN;
-- 修改循环起始日期和结束日期以适应你的需求
FOR date_value IN ('2023-01-01', '2023-01-02', '2023-01-03')
LOOP
INSERT INTO my_table (date, data) VALUES (date_value, '数据');
END LOOP;
COMMIT;
-- 按日期顺序返回更新后的数据
SELECT * FROM my_table ORDER BY date;