#include <sqlite3.h>
#include <iostream>
// 创建表的 SQL 语句(已省略)
int main() {
sqlite3* db;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
return -1;
}
// 创建表
char* errMsg = nullptr;
sqlite3_exec(db, createProvinces, nullptr, nullptr, &errMsg);
sqlite3_exec(db, createCities, nullptr, nullptr, &errMsg);
sqlite3_exec(db, createCounties, nullptr, nullptr, &errMsg);
sqlite3_exec(db, createTowns, nullptr, nullptr, &errMsg);
sqlite3_exec(db, createCommunities, nullptr, nullptr, &errMsg);
// 开启事务
sqlite3_exec(db, "BEGIN TRANSACTION", nullptr, nullptr, &errMsg);
// 插入省份
const char* insertProvinceSQL = "INSERT INTO Provinces (ProvinceName) VALUES (?);";
sqlite3_stmt* stmt;
sqlite3_prepare_v2(db, insertProvinceSQL, -1, &stmt, nullptr);
sqlite3_bind_text(stmt, 1, "河北省", -1, SQLITE_STATIC);
sqlite3_step(stmt);
sqlite3_reset(stmt);
int lastProvinceId = sqlite3_last_insert_rowid(db);
// 插入城市
const char* insertCitySQL = "INSERT INTO Cities (CityName, ProvinceID) VALUES (?, ?);";
sqlite3_prepare_v2(db, insertCitySQL, -1, &stmt, nullptr);
sqlite3_bind_text(stmt, 1, "石家庄市", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 2, lastProvinceId);
sqlite3_step(stmt);
sqlite3_reset(stmt);
int lastCityId = sqlite3_last_insert_rowid(db);
// 插入县
const char* insertCountySQL = "INSERT INTO Counties (CountyName, CityID) VALUES (?, ?);";
sqlite3_prepare_v2(db, insertCountySQL, -1, &stmt, nullptr);
sqlite3_bind_text(stmt, 1, "正定县", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 2, lastCityId);
sqlite3_step(stmt);
sqlite3_reset(stmt);
int lastCountyId = sqlite3_last_insert_rowid(db);
// 插入镇
const char* insertTownSQL = "INSERT INTO Towns (TownName, CountyID) VALUES (?, ?);";
sqlite3_prepare_v2(db, insertTownSQL, -1, &stmt, nullptr);
sqlite3_bind_text(stmt, 1, "正定镇", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 2, lastCountyId);
sqlite3_step(stmt);
sqlite3_reset(stmt);
int lastTownId = sqlite3_last_insert_rowid(db);
// 插入社区
const char* insertCommunitySQL = "INSERT INTO Communities (CommunityName, TownID) VALUES (?, ?);";
sqlite3_prepare_v2(db, insertCommunitySQL, -1, &stmt, nullptr);
sqlite3_bind_text(stmt, 1, "某社区", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 2, lastTownId);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
// 提交事务
sqlite3_exec(db, "COMMIT", nullptr, nullptr, &errMsg);
// 清理资源
sqlite3_close(db);
return 0;
}
能否添加事务和for循环插入,有几十万条数据那不是要把人给写死