基于C++文本文件的数据库读取是指使用C++编程语言从文本文件中读取数据,并将其存储到数据库中。文本文件通常是以纯文本格式存储的,每行数据包含一个或多个字段,字段之间通常使用分隔符(如逗号、制表符等)分隔。
以下是一个简单的示例代码,用于从文本文件中读取数据并将其存储到数据库中:
#include<iostream>
#include <fstream>
#include<string>
#include<vector>
#include<sqlite3.h>
int main() {
// 打开文本文件
std::ifstream infile("data.txt");
if (!infile) {
std::cerr << "无法打开文件\n";
return 1;
}
// 创建数据库连接
sqlite3* db;
int rc = sqlite3_open("data.db", &db);
if (rc) {
std::cerr << "无法打开数据库: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
// 创建数据表
const char* create_table_sql = "CREATE TABLE IF NOT EXISTS data (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);";
rc = sqlite3_exec(db, create_table_sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "无法创建数据表: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
// 从文本文件中读取数据并插入到数据库中
std::string line;
while (std::getline(infile, line)) {
// 解析每行数据
std::vector<std::string> fields;
std::istringstream iss(line);
std::string field;
while (std::getline(iss, field, ',')) {
fields.push_back(field);
}
// 插入数据到数据库中
const char* insert_sql = "INSERT INTO data (name, age) VALUES (?, ?);";
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, insert_sql, -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "无法准备SQL语句: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
rc = sqlite3_bind_text(stmt, 1, fields[0].c_str(), -1, SQLITE_STATIC);
if (rc != SQLITE_OK) {
std::cerr << "无法绑定参数: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
rc = sqlite3_bind_int(stmt, 2, std::stoi(fields[1]));
if (rc != SQLITE_OK) {
std::cerr << "无法绑定参数: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
std::cerr << "无法执行SQL语句: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
rc = sqlite3_finalize(stmt);
if (rc != SQLITE_OK) {
std::cerr << "无法释放SQL语句: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
}
// 关闭数据库连接
rc = sqlite3_close(db);
if (rc != SQLITE_OK) {
std::cerr << "无法关闭数据库: "<< sqlite3_errmsg(db) << "\n";
return 1;
}
return 0;
}
在这个示例代码中,我们使用了SQLite数据库来存储数据。SQLite是一个轻量级的嵌入式数据库,可以直接在C++程序中使用。我们首先创建了一个名为“data”的数据表,包含三个字段:id、name和age。然后从文本文件中读取每行数据,解析出每个字段的值,并将其插入到数据库中。最后关闭数据库连接。
需要注意的是,这个示例代码仅供参考,实际应用中可能需要根据具体情况进行调整。例如,如果文本文件非常大,可能需要使用分批处理的方式来避免内存不足的问题。
TDSQL精英挑战赛
TDSQL精英挑战赛
TDSQL精英挑战赛
企业创新在线学堂
DB・洞见
DB・洞见
企业创新在线学堂
云+社区沙龙online[数据工匠]
DB TALK 技术分享会
云+社区技术沙龙[第14期]
领取专属 10元无门槛券
手把手带您无忧上云