Qt mysql 封装
时间: 2023-05-24 10:06:21 浏览: 274
Qt是一个强大的跨平台C++应用程序开发框架,与MySQL数据库进行交互也是其中一个重要的应用方向。
Qt提供了许多MySQL的接口,但是如果直接使用这些接口会使得我们的应用程序中代码量增加,管理起来会更加困难。因此,对Qt中的MySQL操作进行封装,对于提高代码的可读性和管理性是非常有帮助的。
下面是一个简单的MySQL操作封装实现:
```C++
#include <QSqlQuery>
#include <QSqlError>
class QtMysql
{
public:
explicit QtMysql(const QString& hostName,
const QString& dbName,
const QString& userName,
const QString& password,
const uint port = 3306,
const QString& connectionName = "MYSQL_CONNECTION");
virtual ~QtMysql();
/* Execute query */
QSqlQuery exec(QString sql, bool bRetQuery = false);
/* Transaction */
void beginTransaction();
void commitTransaction();
void rollbackTransaction();
private:
QString m_dbName;
QSqlDatabase m_db;
};
```
该类的构造函数需要传递MySQL的连接信息。使用exec函数执行MySQL查询语句,如果是查询语句返回结果集,如果不是查询语句不会返回任何结果。beginTransaction、commitTransaction和rollbackTransaction分别封装了MySQL的事务处理操作的实现。
下面是具体实现:
```C++
#include "qtmysql.h"
QtMysql::QtMysql(const QString& hostName,
const QString& dbName,
const QString& userName,
const QString& password,
const uint port,
const QString& connectionName) : m_dbName(dbName)
{
m_db = QSqlDatabase::addDatabase("QMYSQL", connectionName);
m_db.setHostName(hostName);
m_db.setPort(port);
m_db.setUserName(userName);
m_db.setPassword(password);
m_db.setDatabaseName(dbName);
if (!m_db.open())
qDebug() << m_db.lastError().text();
}
QtMysql::~QtMysql()
{
if (m_db.isOpen()) {
m_db.close();
}
}
QSqlQuery QtMysql::exec(QString sql, bool bRetQuery)
{
QSqlQuery query(m_db);
bool bRet = query.exec(sql);
if (bRetQuery) {
return query;
}
return QSqlQuery();
}
void QtMysql::beginTransaction()
{
QSqlQuery query(m_db);
query.exec("BEGIN");
}
void QtMysql::commitTransaction()
{
QSqlQuery query(m_db);
query.exec("COMMIT");
}
void QtMysql::rollbackTransaction()
{
QSqlQuery query(m_db);
query.exec("ROLLBACK");
}
```
在使用时,可以直接调用该封装类的相关函数,例如:
```C++
QtMysql mysql("127.0.0.1", "test", "root", "", 3306);
mysql.beginTransaction();
mysql.exec("UPDATE table SET column1=1 WHERE id=1");
mysql.exec("UPDATE table SET column1=2 WHERE id=2");
mysql.rollbackTransaction();
mysql.exec("SELECT * FROM table WHERE column1=1", true);
while (mysql.next()) {
// 处理查询结果 ...
}
```
这样使得代码的可读性和可维护性都有了很大提升。
阅读全文