sql C++实现代码
时间: 2024-05-03 20:18:19 浏览: 51
以下是使用 C++ 实现的一个简单 SQL 解释器,支持 CREATE TABLE、INSERT、SELECT 等基本语句:
```c++
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
// 表格中的一行记录
struct Row {
vector<string> fields;
};
// 表格
struct Table {
string name;
vector<string> fields;
vector<Row> rows;
};
// 数据库
class Database {
private:
unordered_map<string, Table> tables; // 表格集合
public:
// 创建表格
void createTable(const string& name, const vector<string>& fields) {
Table table;
table.name = name;
table.fields = fields;
tables[name] = table;
}
// 插入记录
void insert(const string& tableName, const vector<string>& values) {
Table& table = tables[tableName];
if (table.fields.size() != values.size()) {
cout << "Insert failed: field count mismatch!" << endl;
return;
}
Row row;
row.fields = values;
table.rows.push_back(row);
}
// 查询记录
vector<Row> select(const string& tableName) {
Table& table = tables[tableName];
return table.rows;
}
};
// 解析 SQL 语句
vector<string> parseSql(const string& sql) {
vector<string> tokens;
string token;
for (char c : sql) {
if (isspace(c)) {
if (!token.empty()) {
tokens.push_back(token);
token.clear();
}
} else if (c == ',' || c == '(' || c == ')') {
if (!token.empty()) {
tokens.push_back(token);
token.clear();
}
tokens.push_back(string(1, c));
} else {
token += c;
}
}
if (!token.empty()) {
tokens.push_back(token);
}
return tokens;
}
int main() {
Database db;
while (true) {
cout << "SQL> ";
string sql;
getline(cin, sql);
vector<string> tokens = parseSql(sql);
if (tokens.empty()) {
continue;
}
string command = tokens[0];
if (command == "CREATE") {
string tableName = tokens[2];
vector<string> fields;
for (int i = 4; i < tokens.size() - 1; i++) {
fields.push_back(tokens[i]);
}
db.createTable(tableName, fields);
cout << "Table created." << endl;
} else if (command == "INSERT") {
string tableName = tokens[2];
vector<string> values;
for (int i = 4; i < tokens.size() - 1; i++) {
values.push_back(tokens[i]);
}
db.insert(tableName, values);
} else if (command == "SELECT") {
string tableName = tokens[3];
vector<Row> rows = db.select(tableName);
for (const Row& row : rows) {
for (const string& field : row.fields) {
cout << field << " ";
}
cout << endl;
}
} else {
cout << "Unknown command!" << endl;
}
}
return 0;
}
```
这只是一个简单的实现,实际上 SQL 解释器需要支持更多语句和更复杂的查询语法。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)