下面主要是对mysql数据库的操作,其它的数据库操作其实也类似:
1、在.pro文件中加入QT+= sql,如下图:
2、添加SQL相关头文件
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
3、连接数据库
qDebug()<<QSqlDatabase::drivers(); //查询支持的sql对象,下面调用的数据库实例QMYSQL就是从这里的结果确定的
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //数据库对象
//连接数据库
db.setHostName("192.168.0.1"); //数据库服务器IP
db.setPort(3306); //端口
db.setUserName("test"); //数据库用户名
db.setPassword("123456"); //数据库密码
db.setDatabaseName("test"); //使用哪个数据库
if( !db.open() ){ //数据库打开失败
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
4、查询数据
我们把查到的数据放到一个tablewidget里,这样看起来直观:
QStringList headerText;
headerText<<"权限"<<"姓名"<<"密码";
ui->tableWidget->setColumnCount(headerText.count());
for(int i = 0;i<headerText.count();i++)
{
ui->tableWidget->setHorizontalHeaderItem(i,new QTableWidgetItem(headerText.at(i)));
}
QSqlQuery query; //查询语句
query.exec("select * from user;");
qint32 rowNo = 0;
while(query.next())
{
QTableWidgetItem *item;
QStandardItem *sItem;
qDebug()<<query.value(0).toString()<<":"<<query.value(1).toString()<<":"<<query.value(2).toString()<<":"<<query.value(3).toString();
ui->tableWidget->insertRow(rowNo);
for(int i=0;i<3;i++)
{
item = new QTableWidgetItem(query.value(i+1).toString(),i);
ui->tableWidget->setItem(rowNo,i,item);
}
rowNo++;
}
可以看到查询结果:
5、新增数据
调用QSqlQuery 的query方法即可,查询错误可以使用其lastError函数读到命令失败的错误原因
QSqlQuery query;
QString sqls = QString("insert into user values(%1,%2,%3,%4);")
.arg(11).arg(2).arg("'test1'").arg("'test1'");
qDebug()<<sqls;
if(query.exec(sqls))
{
qDebug()<<"成功";
}
else
{
qDebug()<<"失败";
qDebug()<<query.lastError();
}
6、删除数据
QSqlQuery query;
//删除ID=11的用户
QString sqls = QString("delete from user where id = %1").arg(11);
qDebug()<<sqls;
if(query.exec(sqls))
{
qDebug()<<"成功";
}
else
{
qDebug()<<"失败";
qDebug()<<query.lastError();
}
7、修改数据
QString sqls = QString("update user set username = %1 where id = %1;")
.arg("'user1'").arg(10);
qDebug()<<sqls;
if(query.exec(sqls))
{
qDebug()<<"成功";
}
else
{
qDebug()<<"失败";
qDebug()<<query.lastError();
}
其它的操作如表操作之类的都是sql的填写拼接的问题,就不多描述了。
8、Qt连接MySQL的时候提示“QSqlDatabase: QMYSQL driver not loaded”,可能是缺少库文件libmysql.dll,可以从msyql的安装目录里找到这个文件并放在QT安装目录的编译器目录下的bin目录下,比如“C:\Qt\Qt5.9.0\5.9\mingw53_32\bin”
如果这样依旧不行,检查安装的mysql的位数是否和QT的一致,如果不一致到这个地址:
https://dev.mysql.com/downloads/connector/c/
下载mysql-connector-c,在其lib目录中找到文件“libmysql.dll”,将这个文件复制到Qt的bin目录下,重启Qt Creator后即可正确运行。
总之,要确保程序运行环境下libmysql.dll这个文件对应的mysql的位数与QT的位数相同。