1、QSqlDatabase创建连接数据库实例,一个QSqlDatabase的实例代表了一个数据库连接。
Qt提供的对不同数据库的驱动支持:
Driver Type Description:
QDB2 IBM DB2
QIBASE Borland InterBase Driver
QMYSQL MySQL Driver
QOCI Oracle Call Interface Driver
QODBC ODBC Driver (includes Microsoft SQL Server)
QPSQL PostgreSQL Driver
QSQLITE SQLite version 3 or above
QSQLITE2 SQLite version 2
QTDS Sybase Adaptive Server
下面代码的功能是创建连接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);