一、ODBC 数据源配置
打开ODBC数据源管理器:
- 在Windows搜索栏中键入“ODBC数据源”并选择“ODBC数据源(64位)”(如果你的系统是64位的)。
- 如果你的系统是32位的,你可以选择“ODBC数据源(32位)”。
- 或者,你可以在控制面板中找到ODBC数据源管理器。
添加数据源:
- 在ODBC数据源管理器中,选择“用户DSN/系统DSN”选项卡。
- 点击“添加”按钮,在弹出的对话框中选择要配置的数据库类型(如SQLite、MySQL等)。
- 根据数据库类型和具体的配置要求填写相应的信息,例如数据库文件路径、服务器名称、用户名、密码等。
- 完成配置后,点击“确定”按钮。
二、实现操作代码
创建了一个名为DatabaseManager的类,它封装了对ODBC数据库的操作。这个类提供了open()、close()、isOpen()、insert()、update()、remove()和select()等方法,用于连接、关闭数据库、执行插入、更新、删除和查询操作。
#include <QtSql>
#include <QString>
#include <QDebug>
class DatabaseManager {
public:
DatabaseManager(const QString& dataSourceName) : dataSourceName_(dataSourceName) {
// 连接到ODBC数据源
db_ = QSqlDatabase::addDatabase("QODBC");
db_.setDatabaseName(dataSourceName_);
}
bool open() {
return db_.open();
}
void close() {
db_.close();
}
bool isOpen() const {
return db_.isOpen();
}
bool insert(const QString& tableName, const QStringList& fields, const QStringList& values) {
if (!isOpen())
return false;
QString queryStr = "INSERT INTO " + tableName + " (" + fields.join(", ") + ") VALUES (" + values.join(", ") + ")";
QSqlQuery query;
return query.exec(queryStr);
}
bool update(const QString& tableName, const QString& condition, const QString& updateValues) {
if (!isOpen())
return false;
QString queryStr = "UPDATE " + tableName + " SET " + updateValues + " WHERE " + condition;
QSqlQuery query;
return query.exec(queryStr);
}
bool remove(const QString& tableName, const QString& condition) {
if (!isOpen())
return false;
QString queryStr = "DELETE FROM " + tableName + " WHERE " + condition;
QSqlQuery query;
return query.exec(queryStr);
}
QSqlQuery select(const QString& fields, const QString& tableName, const QString& condition = "") {
QString queryStr = "SELECT " + fields + " FROM " + tableName;
if (!condition.isEmpty())
queryStr += " WHERE " + condition;
QSqlQuery query(queryStr);
return query;
}
private:
QSqlDatabase db_;
QString dataSourceName_;
};
int main() {
DatabaseManager manager("your_odbc_dsn");
if (manager.open()) {
qDebug() << "Connected to database successfully";
// 插入数据
QStringList insertFields = {"name", "age"};
QStringList insertValues = {"'John'", "30"};
if (manager.insert("your_table", insertFields, insertValues))
qDebug() << "Insertion succeeded";
else
qDebug() << "Insertion failed";
// 更新数据
if (manager.update("your_table", "name = 'John'", "age = 35"))
qDebug() << "Update succeeded";
else
qDebug() << "Update failed";
// 删除数据
if (manager.remove("your_table", "name = 'John'"))
qDebug() << "Deletion succeeded";
else
qDebug() << "Deletion failed";
// 查询数据
QSqlQuery qry = manager.select("*", "your_table");
while (qry.next()) {
QString name = qry.value(0).toString();
int age = qry.value(1).toInt();
qDebug() << "Name:" << name << ", Age:" << age;
}
manager.close();
} else {
qDebug() << "Failed to connect to database";
}
return 0;
}