一、Qt和MySQL版本
二、Qt使用数据库
1、新建项目,在.pro中添加,并构建项目
QT += sql
2、添加头文件
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
3、查询数据库驱动
qDebug() << QSqlDatabase::drivers();
输出,表示有以下数据库驱动:
("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
4、连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //本地服务器IP
db.setPart(3306); //端口号
db.setDatabaseName("test"); //数据库名称,
db.setUserName("root"); //用户名
db.setPassword(""); //密码
if(!db.open()) //打开数据库
{
qDebug() << db.lastError();
}
db.close(); //关闭数据库
5、创建数据表
QSqlQuery query;
bool ok = query.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int)ENGINE=INNODB;");
if(!ok)
{
qDebug() << query.lastError();
}
6、数据插入
QSqlQuery query;
bool ok = query.exec("insert into student(id, name, age, score) values(1, '张三', 18, 80)");
if(!ok)
{
qDebug() << query.lastError();
}
7、数据修改
QSqlQuery query;
bool ok = query.exec("update student set score=100 where name='张三' ");
if(!ok)
{
qDebug() << query.lastError();
}
8、数据查询
QSqlQuery query;
bool ok = query.exec("select id from student where name='张三' ");
if(!ok)
{
qDebug() << query.lastError();
}
else
{
query.next();
qDebug() << query.value(0).toInt();
}
//遍历整个表
ok = query.exec("select *from student");
if (!ok)
{
qDebug()<< query.lastError();
}
else
{
while(query.next()) //遍历完为false
{
//方式1:以下标
qDebug()<< query.value(0).toInt()<< query.value(1).toString()
<< query.value(2).toInt() << query.value(3).toInt();
//方式2:以字段
//qDebug()<< query.value("id").toInt()<< query.value("name").toString()
//<< query.value("age").toInt()<< query.value("score").toInt();
}
}
9、数据删除
QSqlQuery query;
bool ok = query.exec("delete from student where name='张三' ");
if(!ok)
{
qDebug() << query.lastError();
}
10、删除整个表
QSqlQuery query;
bool ok = query.exec("drop table student");
if(!ok)
{
qDebug() << query.lastError();
}
三、全部代码
//查看数据库驱动
qDebug() << QSqlDatabase::drivers();
//连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //数据库服务器IP,本地服务器
db.setPort(3306); //端口号
db.setDatabaseName("test"); //数据库名
db.setUserName("root"); //用户名
db.setPassword(""); //密码
bool ok = db.open();
if (!ok)
{
qDebug()<< "open sql error:" << db.lastError();
}
//db.close();
//创建表
QSqlQuery query;
ok = query.exec("create table student(id int primary key auto_increment, "
"name varchar(255), age int, score int)ENGINE=INNODB;");
if (!ok)
{
qDebug()<< "create table:" << query.lastError();
}
//单行插入
ok = query.exec("insert into student(id, name, age, score) values(1, '张三', 18, 80)");
if (!ok)
{
qDebug()<< "insert into error:" << query.lastError();
}
//多行插入
query.prepare("insert into student(name, age, score) values(?,?,?)"); //?是占位符
QVariantList name;
QVariantList age;
QVariantList score;
name << "李四" << "王五" << "赵六";
age << 19 << 20 << 21;
score << 85 << 90 << 95;
//按顺序给字段绑定相应的值
query.addBindValue(name);
query.addBindValue(age);
query.addBindValue(score);
//执行预处理命令
ok = query.execBatch();
if (!ok)
{
qDebug()<< "execBatch error:" << query.lastError();
}
//修改
ok = query.exec("update student set score=100 where name='张三'");
if (!ok)
{
qDebug()<< "update error:" << query.lastError();
}
//查询
query.exec(QString("select id from student where name='赵六'"));
if (!ok)
{
qDebug()<< "select *from error:" << query.lastError();
}
else
{
query.next();
qDebug() << query.value(0).toInt();
}
//遍历
ok = query.exec("select *from student");
if (!ok)
{
qDebug()<< "select *from error:" << query.lastError();
}
else
{
while(query.next()) //遍历完为false
{
//方式1:以下标
qDebug()<< query.value(0).toInt()<< query.value(1).toString()
<< query.value(2).toInt()<< query.value(3).toInt();
//方式2:以字段
//qDebug()<< query.value("id").toInt()<< query.value("name").toString()
//<< query.value("age").toInt()<< query.value("score").toInt();
}
}
//删除某一行
ok = query.exec("delete from student where name='张三'");
if (!ok)
{
qDebug()<< "delete error:" << query.lastError();
}
//删除整个表
ok = query.exec("drop table student");
if (!ok)
{
qDebug()<< "drop table error:" << query.lastError();
}
db.close();//关闭数据库
四、当连接数据库时,提示:QSqlDatabase:QMYSQL driver not loaded
解决办法:
方式1:
把C:\Program Files\MySQL\MySQL Server 8.0\lib目录下的libmysql.dll拷贝到Qt安装目录下的D:\Qt\Qt5.12.0\5.12.0\mingw73_64\bin目录中;(以上两个目录是我的安装目录)
重启Qt,重新运动程序;
方式2:
安装MySQL Workbench时,安装Connector/C++8.0.28-X86
方式3:
卸载重装MySQL Workbench,重启电脑,再打开Qt,测试;