1、QSqlDatabase创建连接数据库实例,一个QSqlDatabase的实例代表了一个数据库连接。
Qt提供的对不同数据库的驱动支持:
下面代码的功能是创建连接QSQLITE类型的数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI", "QSQLITE");
db.setHostName("localhost"); //数据库主机名
db.setDatabaseName("scott"); //数据库名
db.setUserName("stott"); //数据库用户名
db.setPassword("tiger"); //数据库密码
db.open(); //打开数据库连接 调用 open() 方法打开数据库物理连接。在打开连接之前,连接不可用
db.close(); //释放数据库连接
在使用QSqlDatabase::addDatabase("QOCI","QSQLITE")函数时,第一个参数是驱动类型主键,第二个是连接名。
2、QSqlQuery类:操作数据库
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText = QString("CREATE TABLE ConfigInfo ( [DicomFolderPath] VARCHAR(256), \
[OpDicomFilePath] VARCHAR(256) \
);");
qsQuery.prepare(strSqlText);
qsQuery.exe();
strSqlText = "INSERT INTO ConfigInfo (DicomFolderPath, OpDicomFilePath) \
VALUES (:DicomFolderPath, :OpDicomFilePath)";
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":DicomFolderPath", "");
qsQuery.bindValue(":OpDicomFilePath", "");
qsQuery.exec();
CommitDB(qsQuery);
bool CommitDB(QSqlQuery& qsQuery)
{
if (qsQuery.isActive())//成功执行sql语句 isActive会返回true,否则返回false
{
m_qdbDataBase.commit();
return true;
}
else
{
m_qdbDataBase.rollback();
return false;
}
}
以上基本完成了数据库的创建、连接以及table的创建,下面演示查询、删除、增加等基本操作
3、查询table名为UserInput里的所有记录
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("SELECT * FROM UserInput");//查询语法
qsQuery.prepare(strSqlText);
qsQuery.exec();
while (qsQuery.next()) //依次取出查询结果的每一条记录,直至结束
{
UserInputData userInputData;
userInputData.m_id = qsQuery.value(0).toInt();
userInputData.m_assessDate = qsQuery.value(1).toString();
}
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("SELECT MAX(ID) FROM UserInput");//ID最大的值
qsQuery.prepare(strSqlText);
qsQuery.exec();
if (qsQuery.next())
{
return qsQuery.value(0).toInt();
}
else
{
return 0;
}
4、增加
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("INSERT INTO UserInput (ID, AssessDate) \
VALUES (:ID, :AssessDate)");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":ID", id);
qsQuery.bindValue(":AssessDate", userInputData.m_assessDate);
qsQuery.exec();
CommitDB(qsQuery);
5、更新
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("UPDATE UserInput SET AssessDate = :AssessDate \
WHERE ID = :ID");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":AssessDate", userInputData.m_assessDate);
qsQuery.bindValue(":ID", id);
qsQuery.exec();
CommitDB(qsQuery);
6、删除
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("DELETE FROM UserInput WHERE ID = :ID");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":ID", id);
qsQuery.exec();
CommitDB(qsQuery);