版权声明: https://blog.csdn.net/guimaxingtian/article/details/81326032
整理了一下在Qt下使用数据库的基础代码,有几个坑:
(1)要将plugins目录包含进去,可以选择在.pro文件中加INCLUDEPATH语句,也可以在cpp文件里加addlibrary语句,总之要把类似于“.\5.10.1\msvc2015_64\plugins”这样的目录包含进去;
(2)给连接命名后后续使用访问数据库的类时一定要绑定数据库,否则可能会出现“database not open”的报错;
//main.cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QtDebug>
#include <QSqlDriver>
#include <QSqlRecord>
#include <QSqlQueryModel>
#include <QSqlTableModel>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//a.addLibraryPath ("D:\Qt\Qt5.10.1\5.10.1\msvc2015_64\plugins");
//添加驱动,同时为这个连接赋一个名字"TestConn"
/*注意,这里如果给连接命名了,那么之后使用Qt的QSqlQuery、
QSqlQueryModel或者QSqlTableModel就需要绑定这个数据库,
否则会报“database not open”的错误,下面的代码会有示例;
如果不给连接命名,那么后面使用这些类就不需要绑定数据库*/
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL","TestConn");
db.setHostName("localhost"); //连接本地数据库
db.setDatabaseName("test"); //这个是数据库的名字
db.setPort(3306); //端口号
db.setUserName("root"); //用户名
db.setPassword("password"); //密码
if(db.open())
qDebug()<<QString::fromLocal8Bit ("数据库连接成功");
else
qDebug()<<QString::fromLocal8Bit ("数据库连接失败");
qDebug()<<QSqlDatabase::drivers();
QSqlQuery query(db);//绑定数据库
query.exec("SELECT id,name,address FROM user3");
while (query.next()) {
int id = query.value (0).toInt ();
QString name = query.value(1).toString();
QString address = query.value(2).toString ();
qDebug() << id<<" is: "<<name <<" address: "<< address;
}
QSqlTableModel tablemodel(NULL,db);//绑定数据库
tablemodel.setTable ("user3");
tablemodel.setSort (0, Qt::DescendingOrder);
tablemodel.select ();
int row =0;
tablemodel.insertRows(row, 1);
tablemodel.setData(tablemodel.index(row, 0), 4);
tablemodel.setData(tablemodel.index(row, 1), "Peter Gordon");
tablemodel.setData(tablemodel.index(row, 2), QString::fromLocal8Bit("南京东路"));
//删除多行时一定要改一下编辑策略,不然不管count是多少只会删除一行数据
//m_tablemodel.setEditStrategy (QSqlTableModel::OnManualSubmit);
//tablemodel.removeRows (2,2);//删除行,第一个参数为行,第二个参数为删除几行(count)
tablemodel.submitAll ();
QSqlQueryModel model;
model.setQuery("SELECT * FROM user3 ORDER BY id ASC", db);//绑定数据库
for (int i = 0; i < model.rowCount(); ++i) {
int id = model.record(i).value("id").toInt();
QString name = model.record(i).value("name").toString();
QString address = model.record(i).value("address").toString();
qDebug() << id << name<< address;
}
return a.exec();
}