一般流程:
- 创建数据库
- 连接数据库
- 增删查改
- 关闭数据库
环境:win7,vs2013,Qt5.6.0(32 bit),qt add in 1.2.5
创建控制台工程,记得勾选SQL模块,如果忘记勾选:VS”Qt”菜单-“Qt Project Settings”-“Qt Modules”-勾选SQL。
连接数据库的函数:
bool createConnection(QString driver, QString dbName)
{
//addDatabase()的第一个参数
//指定了Qt必须使用哪一个数据库驱动程序来访问这个数据库
QSqlDatabase db = QSqlDatabase::addDatabase(driver);
//接下来,设置数据库的主机名、数据库名、用户名和密码
//QSQLITE只需要设置名字就行了
db.setDatabaseName(dbName);
//打开这个连接,失败将显示出错信息
if (!db.open())
{
//QtSql 模块中的类大多具有lastError()函数,用于检查最新出现的错误
qDebug() << db.lastError();
return false;
}
return true;
}
如果习惯于使用 SQL 语句,我们可以选择
QSqlQuery
类;如果只需要使用高层次的数据库接口(不关心 SQL 语法),我们可以选择
QSqlTableModel
和QSqlRelationalTableModel
。
主函数:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//数据库驱动程序名
QString driver = "QSQLITE";
//数据库名,绝对相对路径都可
QString dbName = "testli.db";
//QString dbName = "D:\QT\project\55_DataBase\testli1.db";
//连接数据库,连接失败则返回
if (!createConnection(driver, dbName))
{
return 1;
}
//创建QSqlTableModel实例
QSqlTableModel model;
//设置所需要操作的表格
model.setTable("measureRecords");
//获取系统时间
QString time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
//获取一个空的record,但是与数据库表有一样的字段空间?不然插入会失败
//帮助文档:It returns an empty record, having only the field names.
QSqlRecord record = model.record();
//设置各字段键值
record.setValue("measureTime", time);
record.setValue("measureNumber", 12);
record.setValue("length", 32);
record.setValue("width", 32);
record.setValue("height", 32);
record.setValue("volume", 45);
record.setValue("weight", 332);
//插入,-1代表插入到行尾
model.insertRecord(-1, record);
return a.exec();
}
代码在这里。
参考:
C++ Qt设计模式(豆瓣)第18章为数据库的介绍
C++GUI Qt4编程(豆瓣)第13章为数据库的介绍