Qt 连接MySql进行增删改查

Qt 连接MySql进行增删改查

QSqlDatabase

QSqlDatabase 是Qt自带的一个连接数据库的类,我们可以直接使用它来进行对数据库的连接和操作。

1、在使用数据库之前首先要将数据库连接,那我们先看它的静态构造类

static QSqlDatabase addDatabase(const QString& type,const QString& connectionName = QLatin1String(defaultConnection));

// 这个静态类可以直接获取到QSqlDatabase 对象
// const QString& type 第一个参数指的是连接的数据库类型,通常有这几种常用的,QPSQL,QMYSQL,QOCI,QODBC,QDB2,QSQLITE,QIBASE
// const QString& connectionName 第二个参数指的是连接名,可自行定义
// eg: 我连接的是MYSQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL",name);

2、获取到对象之后,则需要配置对应的IP,端口,用户名,密码,库名

db.setHostName("ip");  			 // IP
db.setPort(port);				 // 端口
db.setUserName("username");		 // 用户名
db.setPassword("password");      // 密码
db.setDatabaseName("database");  // 库名

3、配置好对应参数之后,则可打开连接,我们看源码

 bool open()
 // 该方法则是打开连接的方法,同时会返回bool类型,反馈我们是否连接成功,如果失败,则需要检查一下上一步配置是否正确

4、至此,数据库连接成功,连接成功之后自然需要对数据库进行增删改查的操作,这时需要使用 QSqlQuery 类;

QSqlQuery

首先,我们看QSqlQuery构造函数

QSqlQuery::QSqlQuery(const QSqlDatabase &db)

// 这里需要我们上一步创建的 QSqlDatabase 对象

创建了QSqlQuery对象之后,则可以进行增删改查的工作。

// 方式一
QSqlQuery query(QSqlDatabase &db);
query.prepare("INSERT INTO person (id, forename, surname) "
               "VALUES (:id, :forename, :surname)");
query.bindValue(":id", 1001);
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();


// 方式二
QSqlQuery query(QSqlDatabase &db);
query.prepare("INSERT INTO person (id, forename, surname) "
               "VALUES (:id, :forename, :surname)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();

// 方式三
QSqlQuery query(QSqlDatabase &db);
query.prepare("INSERT INTO person (id, forename, surname) "
               "VALUES (?, ?, ?)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();

// 方式四
QSqlQuery query(QSqlDatabase &db);
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Bart");
query.addBindValue("Simpson");
query.exec();

// 以上的 query.exec() 方法会反馈bool类型,用于判断执行的SQL语句是否成功
bool QSqlQuery::exec()

删,改

// 方式一 使用QString类的机制组合SQL
QSqlQuery query(QSqlDatabase &db);
int id = 1;
QString str = QString("DELETE FROM test WHERE id = %1").arg(id);
query.exec(str);

// 方式二 直接使用 + 符号组合
QSqlQuery query(QSqlDatabase &db);
QString id1 = "2";
QString str1 = "DELETE FROM test WHERE id = " + id1;
query.exec(str1);

// 方式三 使用占位符的方式
QSqlQuery query(QSqlDatabase &db);
query.prepare("DELETE FROM test WHERE id = ?");
query.addBindValue(3);
query.exec();


// 以上只给出了删除的例子,但是修改组建SQL的几种方式是一样的。

QSqlQuery query(db);
QString str = "SELECT * FROM test";
query.exec(str);
// 通过next() 方法获取查询到的每行数据
while(query.next())
{
    // value(int) 是按照查询的字段顺序来获取对应的结果,如果查询 * 则按照表的字段顺序
    qDebug() << "id:" << query.value(0).toString() << " age:" << query.value(1).toString() << " name:" <<         	 	query.value(2).toString();
}

// 若查询中需要有条件判断,则也可以按照上面删除写的几种方式连接对应的查询条件。

至此,Qt连接数据库进行增删改查的功能已经实现。

你知道的越多,你不知道的越多,我们下期见。

你可能感兴趣的:(qt,mysql,数据库)