Qt 连接mysql数据库

使用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数据库

暂无评论

发表评论