?? sql.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-x11-commercial-3.0.5/doc/sql.doc:69 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>SQL模塊</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
<a href="index.html">
<font color="#004faf">主頁</font></a>
| <a href="classes.html">
<font color="#004faf">所有的類</font></a>
| <a href="mainclasses.html">
<font color="#004faf">主要的類</font></a>
| <a href="annotated.html">
<font color="#004faf">注釋的類</font></a>
| <a href="groups.html">
<font color="#004faf">分組的類</font></a>
| <a href="functions.html">
<font color="#004faf">函數</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>SQL模塊</h1>
<p> 這個模塊是<a href="editions.html">Qt企業版</a>的一部分。
<p> <!-- toc -->
<ul>
<li><a href="#1"> 介紹
</a>
<li><a href="#2"> SQL模塊架構
</a>
<li><a href="#3"> SQL驅動程序插件
</a>
<li><a href="#4"> 連接數據庫
</a>
<li><a href="#5"> 連接單一數據庫
</a>
<ul>
<li><a href="#5-1"> 連接多個數據庫
</a>
</ul>
<li><a href="#6"> 使用QSqlQuery執行SQL命令
</a>
<ul>
<li><a href="#6-1"> 事務處理
</a>
<li><a href="#6-2"> 基本瀏覽
</a>
<li><a href="#6-3"> 基本數據處理
</a>
<li><a href="#6-4"> 定位數據集
</a>
</ul>
<li><a href="#7"> 使用QSqlCursor
</a>
<ul>
<li><a href="#7-1"> 檢索記錄
</a>
<ul>
<li><a href="#7-1-1"> 排序和過濾記錄
</a>
<li><a href="#7-1-2"> 提取數據
</a>
</ul>
<li><a href="#7-2"> 處理記錄
</a>
<ul>
<li><a href="#7-2-1"> 插入記錄
</a>
<li><a href="#7-2-2"> 更新記錄
</a>
<li><a href="#7-2-3"> 刪除記錄
</a>
</ul>
</ul>
<li><a href="#8"> 基于數據的窗口部件
</a>
<ul>
<li><a href="#8-1"> 基于數據的表
</a>
<li><a href="#8-2"> 創建基于數據的窗體
</a>
<ul>
<li><a href="#8-2-1"> 顯示記錄
</a>
<li><a href="#8-2-2"> 在數據窗體中顯示記錄
</a>
<li><a href="#8-2-3"> 編輯記錄
</a>
</ul>
<li><a href="#8-3"> 自定義編輯器窗口部件
</a>
<ul>
<li><a href="#8-3-1"> 為表格自定義編輯器窗口部件
</a>
</ul>
</ul>
<li><a href="#9"> 繼承QSqlCursor
</a>
<li><a href="#10"> 實例表
</a>
</ul>
<!-- endtoc -->
<p> <a name="Introduction"></a>
<h2> 介紹
</h2>
<a name="1"></a><p> Qt的SQL類幫助你給你的Qt應用程序提供無縫的數據庫集成。
<p> <blockquote>
這個概述假設你已經至少有一些SQL的基礎知識。你需要能夠理解簡單的<tt>SELECT</tt>、<tt>INSERT</tt>、<tt>UPDATE</tt>和<tt>DELETE</tt>命令。盡管<a href="qsqlcursor.html">QSqlCursor</a>類提供了數據庫瀏覽和編輯的界面不<em>需要</em>SQL的知識,但是對于SQL的基本理解還是被高度推薦的。一本SQL數據庫的標準文本是C. J. Date所作的<em>《數據庫系統的介紹》(第七版)</em>,ISBN 0201385902。
</blockquote>
<p> 本文所描述的實例是從完全人工編寫代碼的角度出發的,你還可以參考<em>Qt設計器</em>的用戶手冊中“創建數據庫應用程序”這一節,它提供了更高層次的實現方法來演示窗口部件、執行挖掘和處理外鍵查找等相關的操作。
<p> 這份文檔被分為六個部分:
<p> <a href="#Architecture">SQL模塊架構</a>。描述了這些類是如何結合在一起的。
<p> <a href="#Connecting_to_Databases">連接數據庫</a>。這部分解釋了如何使用<a href="qsqldatabase.html">QSqlDatabase</a>類建立數據庫連接。
<p> <a href="#Executing_SQL_commands">執行SQL命令</a>。描述如何執行標準的數據操作命令,比如<tt>SELECT</tt>、<tt>INSERT</tt>、<tt>UPDATE</tt>和<tt>DELETE</tt>。(當然任何有效的SQL指令均可被送往數據庫)。焦點在于用<a href="qsqlquery.html">QSqlQuery</a>進行交互處理。
<p> <a href="#Using_QSqlCursor">使用游標</a>。描述如何使用<a href="qsqlcursor.html">QSqlCursor</a>類來實現更為強大的應用編程接口函數而不象在<a href="qsqlquery.html">QSqlQuery</a>中執行SQL語句。
<p> <a href="#Data-Aware_Widgets">基于數據的窗口部件</a>。描述如何把數據庫與用戶接口鏈接起來。在這一節中我們介紹<a href="qdatatable.html">QDataTable</a>、<a href="qsqlform.html">QSqlForm</a>、<a href="qsqlpropertymap.html">QSqlPropertyMap</a>和<a href="qsqleditorfactory.html">QSqlEditorFactory</a>類,演示如何使用自定義的基于數據的窗口部件。<em>Qt設計器</em>提供了一個方便的可視化途徑來實現同樣的事情。請參考<em>Qt設計器</em>的手冊,更多的詳細情況請見<a href="qdatabrowser.html">QDataBrowser</a>和<a href="qdataview.html">QDataView</a>。
<p> <a href="#Subclassing_QSqlCursor">繼承QSqlCursor</a>。本節給出了繼承QSqlCursor的實例。繼承類可為字段提供默認值與計算字段等功能(比如以一個自動數值為主鍵的索引列),以及顯示計算字段等等的內容。比如顯示一個名稱而不是一個外鍵的標識符。
<p> 這個文檔中所使用的表的定義的所有實例都在<a href="#Example_Tables">實例表</a>部分。
<p> <a name="Architecture"></a>
<h2> SQL模塊架構
</h2>
<a name="2"></a><p> SQL類分成以下三層:
<p> <em>用戶接口層。</em>這些類提供了基于數據的窗口部件,這些窗口部件不僅連接數據庫還可為用戶所瀏覽。(以<a href="qsqlcursor.html">QSqlCursor</a>作為數據源)。終端用戶通過這些組件來瀏覽與編輯數據。<em>Qt設計器</em>集成了這些類并可用來創建基于數據的窗體。這些窗口部件也可在程序中與你的C++代碼直接交互。支持這一層的類包括<a href="qsqleditorfactory.html">QSqlEditorFactory</a>、<a href="qsqlform.html">QSqlForm</a>、<a href="qsqlpropertymap.html">QSqlPropertyMap</a>、<a href="qdatatable.html">QDataTable</a>、<a href="qdatabrowser.html">QDataBrowser</a>和<a href="qdataview.html">QDataView</a>。
<p> <em>SQL應用編程接口層。</em>這些類存取數據庫。<a href="qsqldatabase.html">QSqlDatabase</a>類用來連接數據庫。數據交互的實現要么通過<a href="qsqlquery.html">QSqlQuery</a>類以SQL語句來實現,要么用<a href="qsqlcursor.html">QSqlCursor</a>類,它封裝了SQL命令集。除了<a href="qsqldatabase.html">QSqlDatabase</a>、<a href="qsqlcursor.html">QSqlCursor</a>和<a href="qsqlquery.html">QSqlQuery</a>這些類外,<a href="qsqlerror.html">QSqlError</a>、<a href="qsqlfield.html">QSqlField</a>、<a href="qsqlindex.html">QSqlIndex</a>和<a href="qsqlrecord.html">QSqlRecord</a>也支持該層。
<p> <em>驅動程序層。</em>本層由三個類組成:<a href="qsqlresult.html">QSqlResult</a>、<a href="qsqldriver.html">QSqlDriver</a>和QSqlDriverFactoryInterface。這個層在數據庫和SQL類之間提供了底層的橋梁。這個層的<a href="sql-driver.html">文檔是另外的</a>,因為它只和驅動程序編寫者有關,并且在標準數據庫應用程序編程中很少用到。對于實現Qt的SQL驅動程序插件的詳細情況請參考<a href="sql-driver.html">這里</a>。
<p> <a name="Plugins"></a>
<h2> SQL驅動程序插件
</h2>
<a name="3"></a><p> Qt的SQL模塊可以在運行期動態地裝載新的驅動程序,這是通過<a href="plugins-howto.html">插件</a>實現的。
<p> <a href="sql-driver.html">SQL驅動程序文檔</a>描述了如何為一個特定的數據庫建立相應的插件。
<p> 一旦該插件被建立,Qt可以自動地裝載它,之后就可為<a href="qsqldatabase.html">QSqlDatabase</a>所用(詳細信息請參考<a href="qsqldatabase.html#drivers">QSqlDatabase::drivers</a>())。
<p> <a name="Connecting_to_Databases"></a>
<h2> 連接數據庫
</h2>
<a name="4"></a><p> 如果要使用<a href="qsqlquery.html">QSqlQuery</a>或<a href="qsqlcursor.html">QSqlCursor</a>類,則少要連接并打開一個數據庫連接。
<p> 如果應用程序只需要一個數據庫連接,<a href="qsqldatabase.html">QSqlDatabase</a>類可以創建一個為所有SQL操作所利用的默認連接,如果需要多個數據庫連接,每個連接也可以容易地建立。
<p> <a href="qsqldatabase.html">QSqlDatabase</a>需要<a href="qsqldatabase-h.html">qsqldatabase.h</a>這個頭文件。
<p> <a name="Connecting_to_a_Single_Database"></a>
<h2> 連接單一數據庫
</h2>
<a name="5"></a><p> 創建一個數據庫連接需要三個操作:激活驅動程序、設置連接信息、打開連接。
<p>
<pre> #include <<a href="qapplication-h.html">qapplication.h</a>>
#include <<a href="qsqldatabase-h.html">qsqldatabase.h</a>>
#include "../login.h"
int main( int argc, char *argv[] )
{
<a href="qapplication.html">QApplication</a> app( argc, argv );
<a name="x2141"></a> <a href="qsqldatabase.html">QSqlDatabase</a> *defaultDB = QSqlDatabase::<a href="qsqldatabase.html#addDatabase">addDatabase</a>( DB_SALES_DRIVER );
if ( defaultDB ) {
<a name="x2143"></a> defaultDB-><a href="qsqldatabase.html#setDatabaseName">setDatabaseName</a>( DB_SALES_DBNAME );
<a name="x2146"></a> defaultDB-><a href="qsqldatabase.html#setUserName">setUserName</a>( DB_SALES_USER );
<a name="x2145"></a> defaultDB-><a href="qsqldatabase.html#setPassword">setPassword</a>( DB_SALES_PASSWD );
<a name="x2144"></a> defaultDB-><a href="qsqldatabase.html#setHostName">setHostName</a>( DB_SALES_HOST );
<a name="x2142"></a> if ( defaultDB-><a href="qsqldatabase.html#open">open</a>() ) {
// 數據庫被成功打開,我們現在可以運行SQL命令。
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -