QT 的数据库操作(QSqlDatabase、QSqlQuery)

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);





你可能感兴趣的:(QT)