c语言 csv文件转化成数据库 进行检索
时间: 2024-03-15 14:45:50 浏览: 64
要将CSV文件转换为数据库,你可以使用C语言中的SQLite数据库。SQLite是一种轻量级的数据库,可以在本地存储和管理数据。你需要使用SQLite的API来创建数据库表并将CSV文件中的数据导入到数据库中。
以下是一个简单的示例代码,演示如何将CSV文件转换为SQLite数据库并进行查询:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
#define MAX_LINE_LEN 1024
// 从CSV文件中读取数据并将其插入到数据库中
int insert_csv_data(sqlite3 *db, const char *csv_file, const char *table_name) {
// 打开CSV文件
FILE *fp = fopen(csv_file, "r");
if (!fp) {
printf("Failed to open CSV file: %s\n", csv_file);
return -1;
}
// 创建表
char sql[MAX_LINE_LEN];
sprintf(sql, "CREATE TABLE %s (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, gender TEXT);", table_name);
int rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
printf("Failed to create table: %s\n", sqlite3_errmsg(db));
fclose(fp);
return -1;
}
// 读取CSV文件中的数据并插入到数据库中
char line[MAX_LINE_LEN];
while (fgets(line, MAX_LINE_LEN, fp)) {
// 解析CSV行
char *name = strtok(line, ",");
int age = atoi(strtok(NULL, ","));
char *gender = strtok(NULL, ",");
// 插入到数据库中
sprintf(sql, "INSERT INTO %s (name, age, gender) VALUES ('%s', %d, '%s');", table_name, name, age, gender);
rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
printf("Failed to insert data: %s\n", sqlite3_errmsg(db));
fclose(fp);
return -1;
}
}
fclose(fp);
return 0;
}
// 在数据库中查询数据
int query_data(sqlite3 *db, const char *table_name, const char *name) {
// 查询数据
char sql[MAX_LINE_LEN];
sprintf(sql, "SELECT * FROM %s WHERE name='%s';", table_name, name);
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
printf("Failed to prepare statement: %s\n", sqlite3_errmsg(db));
return -1;
}
// 遍历结果集并输出
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
char *name = (char*)sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
char *gender = (char*)sqlite3_column_text(stmt, 3);
printf("id=%d, name=%s, age=%d, gender=%s\n", id, name, age, gender);
}
sqlite3_finalize(stmt);
return 0;
}
int main() {
// 打开数据库
sqlite3 *db;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
printf("Failed to open database: %s\n", sqlite3_errmsg(db));
return -1;
}
// 将CSV文件转换为数据库
rc = insert_csv_data(db, "data.csv", "person");
if (rc != 0) {
printf("Failed to insert data\n");
sqlite3_close(db);
return -1;
}
// 在数据库中查询数据
rc = query_data(db, "person", "Tom");
if (rc != 0) {
printf("Failed to query data\n");
sqlite3_close(db);
return -1;
}
// 关闭数据库
sqlite3_close(db);
return 0;
}
```
在这个示例代码中,我们首先使用SQLite API创建了一个名为“person”的表格,然后从CSV文件中读取数据并将其插入到该表格中。最后,我们使用SQLite API在表格中查询了名为“Tom”的人的信息。
阅读全文