#include <iostream>
#include <QString>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QVariantMap>
QSqlDatabase createConnection() {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("your_database_name");
db.setUserName("your_username");
db.setPassword("your_password");
if (!db.open()) {
std::cerr << "Error connecting to database." << std::endl;
exit(1);
}
return db;
}
template <class T>
QVariantMap selectData(QSqlDatabase& db, const QString& tableName, const QString& condition) {
QSqlQuery query(db);
QString queryString = QString("SELECT * FROM %1 WHERE %2").arg(tableName).arg(condition);
query.exec(queryString);
QVariantMap result;
while (query.next()) {
T data;
data.populate(query);
result[T::entityName()] = data.toJson();
}
return result;
}
template <class T>
void insertData(QSqlDatabase& db, const T& data, const QString& tableName) {
QSqlQuery query(db);
QVariantMap map = data.toMap();
QString columnsStr = map.keys().join(", ");
QString valuesStr = map.values().join("', '");
QString queryString = QString("INSERT INTO %1 (%2) VALUES ('%3')").arg(tableName).arg(columnsStr).arg(valuesStr);
query.exec(queryString);
}
template <class T>
void deleteData(QSqlDatabase& db, int id, const QString& tableName) {
QSqlQuery query(db);
QString queryString = QString("DELETE FROM %1 WHERE id = %2").arg(tableName).arg(id);
query.exec(queryString);
}
class Student {
public:
int id;
QString name;
int age;
void populate(const QSqlQuery& query) {
id = query.value("id").toInt();
name = query.value("name").toString();
age = query.value("age").toInt();
}
QVariantMap toMap() {
QVariantMap map;
map["name"] = name;
map["age"] = age;
return map;
}
static QString entityName() {
return "Student";
}
};
int main() {
QSqlDatabase db = createConnection();
QVariantMap studentData = selectData<Student>(db, "Students", "age > 20");
std::cout << "Student Data:" << std::endl;
for (auto& student : studentData) {
std::cout << student.first.toStdString() << ": " << student.second.toMap()["name"].toString().toStdString() << ", " << student.second.toMap()["age"].toInt() << std::endl;
}
// 添加新数据
Student newStudent;
newStudent.name = "John";
newStudent.age = 25;
insertData(db, newStudent, "Students");
// 删除数据
int idToDelete = 1; // 假设要删除 id 为 1 的学生
deleteData(db, idToDelete, "Students");
db.close();
return 0;
}
QT 通用CRUD的简单实现
最新推荐文章于 2024-07-08 17:11:23 发布