1. 程式人生 > 實用技巧 >qt sql 資料庫

qt sql 資料庫

Qt SQL C++ Classes

QSqlDatabase:Represents a connection to a database,代表了一個連線的資料庫
QSqlDriverCreator:Template class that provides a SQL driver factory for a specific driver type,
QSqlDriverCreatorBase:The base class for SQL driver factories
QSqlDriver:Abstract base class for accessing specific SQL databases
QSqlDriverPlugin:Abstract base for custom QSqlDriver plugins
QSqlError:SQL database error information,,,sql訪問資料庫時的錯誤資訊
QSqlField:Manipulates the fields in SQL database tables and views
QSqlIndex:Functions to manipulate and describe database indexes
QSqlQuery:Means of executing and manipulating SQL statements,執行或維護sql語句
QSqlRecord:Encapsulates a database record,壓縮封裝了資料庫的記錄
QSqlResult:Abstract interface for accessing data from specific SQL databases,提供了訪問sql獲得資料的介面

  • QSqlQueryModel

該類提供了一種針對SQL結果集的只讀資料模式,是用於執行SQL語句和遍歷結果集的高階介面。它建立在QSqlQuery之上,能夠為顯示類如QTableView提供資料。例如:

    QSqlQueryModel *model = new QSqlQueryModel;

      model->setQuery("SELECT name, salary FROM employee");
      model->setHeaderData(0, Qt::Horizontal, tr("Name"));
      model->setHeaderData(1, 
Qt
::Horizontal, tr("Salary"));
      QTableView *view = new QTableView;
      view->setModel(model);

      view->show();

//上述程式碼,我們設定了物件model的檢索,然後設定了顯示錶頭欄位。QSqlQueryModel 也能夠用來程式設計訪問資料庫,而不需要顯示。

      QSqlTableModel model;
      model.setTable("employee");
      model.select();
int salary = model.record(4).value("salary").toInt();
//上述程式碼獲取sql結果集中第四條記錄的salary單元的值。假如salary位於第2列,也可通過如下程式碼獲取。
      int salary = model.data(model.index(4, 2)).toInt();

預設情況model為只讀模式,為了讓其可讀寫,可重寫整合該類重寫setData和flags函式。另一個選擇是使用QSqlTableModel類,該類可對資料庫的單個表格進行讀寫操作。querymodel例子演示了怎麼通過QSqlQueryModel顯示sql結果,使用者怎麼繼承QSqlQuerModel來自定義資料內容,怎樣建立一個基於QSqlQueryModel的可讀寫模式。在sql語句中,如果資料庫不能返回查詢中所選行的數量,則該模型將以增量方式獲取行。更多資訊參加fetchMore()。

重要函式:

1,int columnCount(),introwCount():獲取當前列數或行數

2,fetchMore():從資料庫獲取更多行

3,headerData():返回指定行的表頭資料

4,insertColumns():指定位置插入一定數目的列

5,lastError():返回最近一次的錯誤資訊

6,query():返回當前檢索

7,record():範圍指定行的記錄
QSqlRelationalDelegate:Delegate that is used to display and edit data from a QSqlRelationalTableModel.用於顯示/編輯來自QSqlRelationalTableMode的資料的代理
QSqlRelation:Stores information about an SQL foreign key:
QSqlRelationalTableModel:Editable data model for a single database table, with foreign key support
QSqlTableModel:Editable data model for a single database table

QSqlRecord

  • QSqlField

用於操控sql資料庫和檢視中的欄位,代表著資料庫或檢視中單列的特性,比如資料型別,列名稱,也代表著一列所包含的能夠改變或顯示的值。QSqlField物件很少在應用程式程式碼中顯式建立。 通常可以通過已經包含欄位列表的QSqlRecords間接訪問它們。

重要函式:

  • defaultValue,setDefaultValue返回和設定欄位的預設值

  • isAutoValue,如果值通過資料庫自動生成,則返回true,如自動增加的主鍵值
  • setAutoValue,標記該欄位是否為為自動生成的值。
  • isGenerated,setGenerated,返回或設定值的生成狀態。設定生成狀態。 如果gen為false,則不會為此欄位生成SQL; 否則,Qt類(例如QSqlQueryModel和QSqlTableModel)將為此欄位生成SQL。
  • length,setLength,返回或設定欄位長度。設定欄位長度時,對於字串,這是字串可以容納的最大字元數。 對於其他型別,含義也有所不同。
  • name,setName,返回或設定欄位名稱
  • precision,setPrecision,設定或返回欄位精度,只對數字型別有用。
  • isReadOnly,setReadOnly,判斷是否為只讀欄位,設定為只讀欄位,對於只讀欄位,不能設定其值也不能清空其值。
  • setRequired,setRequiredStatus(),requiredStatus().,設定或範圍欄位是否必須的,有必須的(QSqlField::Required)和可選擇(QSqlField::Optional)的兩種狀態。
  • setType,type,設定或返回當前欄位的型別,即為QVariant的型別之一
  • value,setValue,設定或返回當前欄位的值,設定為空值時,採用clear