1. 程式人生 > >QT 的資料庫操作(QSqlDatabase、QSqlQuery)

QT 的資料庫操作(QSqlDatabase、QSqlQuery)

1、QSqlDatabase建立連線資料庫例項,一個QSqlDatabase的例項代表了一個數據庫連線。

Qt提供的對不同資料庫的驅動支援:

Driver Type Description:QDB2        IBM DB2QIBASE     Borland InterBase DriverQMYSQL  MySQL DriverQOCI        Oracle Call Interface DriverQODBC    ODBC Driver (includes Microsoft SQL Server)QPSQL     PostgreSQL DriverQSQLITE   SQLite version 3 or above
QSQLITE2 SQLite version 2QTDS        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);