使用Qt连接MySQL需要在项目的.PRO文件里添加一行 QT += sql 才可以。
连接数据库还需要添加相应的头文件 #include <QSqlDatabase>
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setDatabaseName("test"); db.setUserName("root"); db.setPassword("www.zploo.com"); if(db.open()) qDebug() << "数据库链接成功";
我这是连接的本地的数据库,需要注意的一点就是 Qt Creator连接操作MySql数据库需要 libmysql.dll (MySQL的类库可以点击这里下载)
1) 进入目录: C:\Qt\Qt5.5.0\5.5\mingw492_32\bin (自定义安装Qt,路径有所差异)
2) 把 libmysql.dll 拷贝到上面目录
连接上数据库后要做的当然就是 新建一个表了 ,在QT中很方便 直接使用QSqlQuery类中的 exec成员函数就可以了
QSqlQuery sql; sql.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int);");
新增一条数据,删除一条数据,删除表,删除数据库,和上面的一样也是使用QSqlQuery类中的 exec成员函数 把参数里的 sql语句换一换就可以了
sql.exec("insert into student(name, age, score) values('zploo', 18, 59);");
真正开发中还会遇到批量添加数据的情况,给大家介绍两种风格的批量添加数据 分别是 ODBC 风格和 Oracle风格
QSqlQuery sql; sql.prepare("insert into student (name, age, score) values (?, ?, ?);"); QVariantList name; name << "a" << "b" << "c"; QVariantList age; age << 12 << 13 << 14; QVariantList score; score << 60 << 79 << 99; sql.addBindValue(name); sql.addBindValue(age); sql.addBindValue(score); bool zploo = sql.execBatch(); if(!zploo) qDebug() << "数据添加失败";
QSqlQuery sql; sql.prepare("insert into student (name, age, score) values (:name, :age, :score);"); QVariantList name; name << "xiaoa" << "xiaob" << "xiaoc"; QVariantList age; age << 33 << 44 << 55; QVariantList score; score << 89 << 90 << 99; sql.bindValue(":name", name); sql.bindValue(":score", score); sql.bindValue(":age", age); bool zploo = sql.execBatch(); if(!zploo) qDebug() << "数据批量添加失败";
Qt中还可以直接使用 QSqlDatabase 类对数据库开启“事务” ,这样数据的一些操作就可以有回滚功能了
比如说我们要从数据库中删除一条数据 ,就可以先开启一个事务, 在删除数据后 只有执行了 commit() 操作 这行数据才会被真的删除 否则的话可以通过 rollback() 将刚才的删除操作回滚!
void Widget::on_buttonDel_clicked() { //获取行编辑内容 QString name = ui->lineEdit->text(); QString sql = QString("delete from student where name = '%1'").arg(name); //开启一个事务 QSqlDatabase::database().transaction(); //声明一个QSqlQuery类 QSqlQuery query; //执行SQL语句 query.exec(sql); } void Widget::on_buttonSure_clicked() { //确定删除 QSqlDatabase::database().commit(); } void Widget::on_buttonCancel_clicked() { //回滚,撤销 QSqlDatabase::database().rollback(); }
这是使用Qt连接Mysql数据库的一个小练习,需要这个项目完整代码的朋友可以点击这里下载:Qt连接Mysql数据库