?? prov_paramquery_disc.html
字號:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="Author" content="TF">
<meta name="generator" content="HTML Tidy, see www.w3.org">
<title>數(shù)據(jù)庫應(yīng)用程序開發(fā)者指南: 從一個數(shù)據(jù)源中獲得數(shù)據(jù)</title>
<link type="text/css" href="jbdocs.css" rel="stylesheet">
</head>
<body>
<a name="_top_"></a>
<h3>參數(shù)化查詢: 提示與技巧</h3>
<hr>
譯者名字:cage_yang(JD012)<br>
郵件地址:<a href="mailto:cage_yang@163.com">cage_yang@163.com</a>
<blockquote class="bsku">數(shù)據(jù)庫應(yīng)用程序開發(fā)是JBuilder專業(yè)版本與企業(yè)版本的一個特征.分布式應(yīng)用程序開發(fā)是JBuilder企業(yè)版本的一個特征.</blockquote>
<p>該系統(tǒng)主題包括提示技巧</p>
<ul>
<li>確定怎樣使用指定的參數(shù)與參數(shù)標(biāo)記</li>
<li>使用新參數(shù)重新執(zhí)行查詢</li>
<li>在一個主-從關(guān)系中使用參數(shù)化查詢</li>
</ul>
<a name="exposing"></a>
<h4>使用參數(shù)</h4>
<!--BNDX="parameterized queries:adding columns;adding columns:to parameterized queries"-->
<!--BNDX="ParameterRow component:;named:parameters;? as JDBC parameter marker;parameter markers"-->
<p>為了在一個參數(shù)化查詢中賦予參數(shù)值, 你一定要先創(chuàng)建一個<code>ParameterRow</code>并且增加一個指定的列用于保存?zhèn)鹘o查詢的值.</p>
<p>任何一個<code>ReadWriteRow</code>,比如<code>ParameterRow</code>, <code>DataSet</code>, and <code>DataRow</code>可以作為查詢或者過程參數(shù)使用. 在<code>ParameterRow</code>中, 列可簡單地通過<code>addColumns</code>與<code>setColumns</code>方法來創(chuàng)建. </p>
<p>在DataExpress的APIs中<code>Row</code>類被廣泛使用.<code>ReadRow</code>與<code>ReadWriteRow</code>被當(dāng)作類似接口加以使用. </p>
<p>與DataSet方法相關(guān)的類層次結(jié)構(gòu)如下:</p>
<pre>
java.lang.Object
+----<a href="../ref/dx/com.borland.dx.dataset.ReadRow.html">com.borland.dx.dataset.ReadRow</a>
+----<a href="../ref/dx/com.borland.dx.dataset.ReadWriteRow.html">com.borland.dx.dataset.ReadWriteRow</a>
+----<a href="../ref/dx/com.borland.dx.dataset.DataSet.html">com.borland.dx.dataset.DataSet</a>
+----<a href="../ref/dx/com.borland.dx.dataset.StorageDataSet.html">com.borland.dx.dataset.StorageDataSet</a>
+----com.borland.dx.sql.dataset.QueryDataSet
</pre>
<ul>
<li>StorageDataSet方法處理數(shù)據(jù)集結(jié)構(gòu)</li>
<li>DataSet方法處理瀏覽</li>
<li>ReadWriteRow方法讓你在當(dāng)前行中編輯列數(shù)據(jù)</li>
<li>ReadRow方法用于訪問當(dāng)前行列數(shù)據(jù)</li>
<li>TableDataSet與QueryDataSet繼承了所有的這些方法.</li>
</ul>
<p><code>Row</code>類提供訪按順序與列名稱訪問列數(shù)據(jù)值的途徑.
編寫代碼中,指定列名來訪問是一個更健壯更可讀的方式. 通過指定列名來訪問不如按序訪問快, 但如果在你的
<code>DataSet</code>中列數(shù)少于20其訪問速度仍然是很快的, 這是由于特有的高速的名字/順序匹配運算法則. 同樣的,使用同一個串訪問同一個列是一個好的習(xí)慣. 這樣節(jié)約了內(nèi)存并且也便于輸入.</p>
<p><code>ParameterRow</code>在<code>QueryDescriptor</code>中傳遞. <code>query</code>屬性編輯器允許你選擇一個參數(shù)行. 編輯<code>ParameterRow</code>, 如增加一列并改變它的屬性, 都能夠在檢視器或者在代碼中完成.</p>
<p>例如, 你創(chuàng)建一個有兩列(low_no與high_no)的<code>ParameterRow</code>.在你的參數(shù)查詢中,你可以引用low_no與high_no, 并且可以和表中任一字段作比較. 見下面的關(guān)于怎樣按不同方法使用這些值.</p>
<p>在JBuilder中,參數(shù)化查詢能夠帶指定的參數(shù)、參數(shù)標(biāo)記或者一個主-從關(guān)系運行. 以下的部分給一個簡短的解釋.</p>
<ul>
<li>
<p>關(guān)于命名參數(shù):</p>
<p>當(dāng)參數(shù)標(biāo)記在查詢中以冒號后跟一個包括文字與數(shù)字的名字指定時,參數(shù)名稱的匹配就完成了. The column in the <a href="../ref/dx/com.borland.dx.dataset.ParameterRow.html"><code>ParameterRow</code></a>中的列與用于設(shè)置參數(shù)值的參數(shù)標(biāo)記有相同的名稱.例如,在下面的SQL語句中, 值以命名參數(shù)傳遞的:</p>
<pre>
SELECT * FROM employee where emp_no > :low_no and emp_no < :high_no
</pre>
<p>在這條SQL語句中, <code>:low_no</code>與<code>:high_no</code>是參數(shù)標(biāo)記,在程序運行期間,這些參數(shù)作為賦給SQL語句實際值的占位符. 此處的值可能來自可視化組件或者由程序代碼產(chǎn)生.在設(shè)計期間,使用該列的默認(rèn)值.當(dāng)參數(shù)被賦予一個名稱,它們能夠以任意次序傳遞到查詢中.JBuilder會在運行期間以適當(dāng)?shù)捻樞驅(qū)?shù)綁定到數(shù)據(jù)集中.</p>
<p>在<a href="prov_paramquery.html">"指南:參數(shù)化一個查詢"</a>中,在<code>ParameterRow</code>中增中兩列來保存最小與最大值.該查詢僅返回值大于最小值并小于最大值的數(shù)據(jù).</p>
</li>
<li>
<p>使用"?"參數(shù)標(biāo)記:</p>
<p>當(dāng)簡單用問號作為查詢標(biāo)記時,參數(shù)值的設(shè)置是嚴(yán)格按照從左到右的順序的.</p>
<p>例如,以下的SQL語句中, ?號標(biāo)記作為參數(shù):</p>
<p><a name="paramvalues"></a><code>SELECT * FROM employee WHERE emp_no > ?</code> <!--BNDX="parameterized queries:binding values;binding parameter values"-->
<!--BNDX="data sets:binding parameter values"-->
</p>
<a name="binding"></a>
<p>在這個SQL語句中, "?"是一個實際值的占位符. 該值可能來自可視化組件或者來自程序代碼. 當(dāng)使用一個?參數(shù)標(biāo)記時,嚴(yán)格按照從左到右的順序傳遞到參數(shù)值.</p>
</li>
<li>
<p>使用一個主從關(guān)系:</p>
<p>主從數(shù)據(jù)集至少存在一個共同的字段.該字段用于參數(shù)化查詢.更多的這方面的信息參見<a href="#parammasterdetail">"在主-從關(guān)系中使用參數(shù)化查詢"</a>.</p>
</li>
</ul>
<a name="supplying"></a>
<h4>使用新參數(shù)重新執(zhí)行參數(shù)化查詢</h4>
<!--BNDX="parameterized queries:supplying new values"-->
<p>為了使用新的參數(shù)重新執(zhí)行查詢,在<code>ParameterRow</code>中設(shè)置值,然后調(diào)用<code>QueryDataSet.refresh()</code>方法來促使使用新的參數(shù)進行重新查詢.例如,用一個用戶界面組件設(shè)置參數(shù)值,你可以如此使用SQL語句:</p>
<pre>
SELECT * FROM phonelist WHERE lastname LIKE :searchname
</pre>
<p>在這個例子中, :searchname參數(shù)的值能夠從用戶界面組件中得到.做到這一點,你不得不:</p>
<ol>
<li>組件值每變化一次,都要從組件中獲得變化值</li>
<li>將值放入<code>ParameterRow</code>對象中</li>
<li>將那個對象提供給<code>QueryDataSet</code></li>
<li>調(diào)用<code>QueryDataSet</code>的<code>refresh()</code>方法</li>
</ol>
<p>詳細信息見<a href="prov_paramquery.html">"指南:參數(shù)化查詢"</a> </p>
<p>如果你想賦予<code>query</code>的值在數(shù)據(jù)集中存在,在<code>QueryDescriptor</code>中你能夠使用那個數(shù)據(jù)集作為你的<code>ReadWriteRow</code>,可以瀏覽該數(shù)據(jù)集,并且為每個值返回一個查詢. </p>
<a name="parammasterdetail"></a>
<h4>在主-從關(guān)系中的參數(shù)化查詢</h4>
<!--BNDX="parameterized queries:for master-detail records;master-detail relationships:queries"-->
<!--BNDX="fetching data:detail records"-->
<p>在<code>DelayedDetailFetch</code>設(shè)置為<code>true</code>的主從關(guān)系中,你可以象這樣指定一個SQL語句:</p>
<p><code>SELECT * FROM employee WHERE country = :job_country</code></p>
<p>該例子中, :job_country是從(詳細)數(shù)據(jù)集用于連接一個主數(shù)據(jù)集的字段.你能夠指定和主數(shù)據(jù)集需要的連接字段一樣多的參數(shù).在一個主-從關(guān)系中,參數(shù)一定總是被賦予一個和列名相匹配的名稱.更多的關(guān)于主-從關(guān)系與<code>DelayedDetailFetch</code>參數(shù)的信息,見<a href="prov_masterdetail.html">"建立一個主-從關(guān)系"</a>.</p>
<p>在一個主-從關(guān)系描述符中,綁定動作是隱式完成的. 隱式的綁定意味著數(shù)據(jù)值不是由程序員提供的,他們從主數(shù)據(jù)集中獲得并在執(zhí)行查詢中隱式綁定. 查詢執(zhí)行時,為了提高性能,綁定參數(shù)總味著給語句與本地和服務(wù)器參數(shù)分配資源.</p>
<p>如果你準(zhǔn)備賦予<code>query</code>參數(shù)的值在數(shù)據(jù)集中存在,你能夠在<code>QueryDescriptor</code>使用數(shù)據(jù)集作為你的<code>ReadWriteRow</code>,可以瀏覽數(shù)據(jù)結(jié)果集并且為每個值返回查詢結(jié)果并顯示在從數(shù)據(jù)集中.</p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -