📄 prov_query.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>数据库应用程序开发者指南:从一个数据源中获得数据</title>
<link type="text/css" href="jbdocs.css" rel="stylesheet">
</head>
<body>
<br><br>
<a name="_top_"></a>
<h2>查询数据库</h2>
<hr>
译者名字:cage_yang(JD012)<br>
邮件地址:<a href="mailto:cage_yang@163.com">cage_yang@163.com</a>
<!--BNDX="queries;SQL queries;QueryDataSet component:overview"-->
<!--BNDX="queries:required components;SQL queries:required components;creating queries"-->
<!--BNDX="queries:overview;SQL queries:overview;fetching data"-->
<blockquote class="bsku">数据库应用程序开发是JBuilder专业版本与企业版本的一个特征.分布应用程序的开发是JBuilder企业版本的一个特征.</blockquote>
<p>一个<code>QueryDataSet</code>组件是一个JDBC的<code>DataSet</code>,用于管理JDBC数据供应者,在<code>query</code>属性中定义.要从一个数据源取数据放入<code>StorageDataSet</code>组件,你可以在JBuilder中使用<code>QueryDataSet</code>组件.这个行为称作"providing". 一旦数据已经提供,你能够浏览并在数据敏感组件中进行本地操作.当你想把改变存回数据库,你一定要提交数据.DataExpress体系结构有详细讨论<a href="dh_javadatabaseapp.html">"理解JBuilder数据库应用程序"</a>.</p>
<p><code>QueryDataSet</code>能够使你用SQL语句访问或者从你的数据库提供数据.你可以直接添加一个<code>QueryDataSet</code>组件到你的应用程序中去,或者添加一个数据模块<a href="dm_datamodules.html">data module</a>用于集中进行数据访问并控制商业逻辑.</p>
<p>查询一个数据表,你需要以下组件(这些组件可以动态提供或者在设计时提供):</p>
<ul>
<li><a href="../ref/dx/com.borland.dx.sql.dataset.Database.html"><code>database</code></a>
<p><code>Database</code>组件封装了JDBC连接SQL服务器的连接细节并提供轻量级的事务支持.</p>
</li>
<li>
<p><a href="../ref/dx/com.borland.dx.sql.dataset.QueryDataSet.html"><code>QueryDataSet</code></a></p>
<p><code>QueryDataSet</code>组件用于在一个SQL数据库中针对表提供运行一个查询语句的功能性,并保存从执行查询中得到的结果集.</p>
</li>
<li>
<p><a href="../ref/dx/com.borland.dx.sql.dataset.QueryDescriptor.html"><code>QueryDescriptor</code></a></p>
<p><code>QueryDescriptor</code>对象存储查询属性,包括被查询的数据库与用于执行的查询字符串以及任意的查询参数.</p>
</li>
</ul>
<p><code>QueryDataSet</code>具有一个内在的从JDBC数据源中取出数据的功能.它同样也生成相应的插入,更新,删除SQL查询.</p>
<p>下面的<code>QueryDescriptor</code>对象的属性影响查询的执行.这些属性可以在属性编辑器中进行可视化设置. 关于<code>query</code>属性编辑器与工具见 <a href="prov_querybuilder.html">"了解查询对话框;</a>.</p>
<table width="95%" border="2">
<tr>
<th>Property</th>
<th>Effect</th>
</tr>
<tr>
<td width="25%"><code>database</code></td>
<td>Specifies what <code>Database</code> connection object to run the query against.</td>
</tr>
<tr>
<td width="25%"><code>query</code></td>
<td>A SQL statement (typically a SELECT statement).</td>
</tr>
<tr>
<td width="25%"><code>parameters</code></td>
<td>An optional <code>ReadWriteRow</code> from which to fill in parameters, used for <a href="prov_paramquery.html">parameterized queries</a>.</td>
</tr>
<tr>
<td width="25%"><code>executeOnOpen</code></td>
<td>Causes the <code>QueryDataSet</code> to execute the query when it is first opened. This is useful for presenting live data at design time. You may also want this enabled at run time.</td>
</tr>
<tr>
<td width="25%"><code>loadOption</code></td>
<td>An optional integer value that defines the method of loading data into the data set. Options are:
<ul>
<li>Load All Rows: load all data up front.
</li>
<li>Load Rows Asynchronously: causes the fetching of <code>DataSet</code> rows to be performed on a separate thread. This allows the <code>DataSet</code> data to be accessed and displayed as the <code>QueryDataSet</code> is fetching rows from the database connection.
</li>
<li>Load As Needed: load the rows as they are needed.
</li>
<li>Load One Row At A Time: load as needed and replace the previous row with the current. Useful for high-volume batch-processing applications.
</li>
</ul>
</td>
</tr>
</table>
<p><code>QueryDataSet</code>可以以三种不同的方式取得数据.</p>
<ul>
<li>非参数化查询: 执行查询后,将查询后的结果集放入<code>QueryDataSet</code>.
</li>
<li>参数化查询: 在SQL语句中使用查询变量,在执行SQL语句中赋予实际的参数值.更多的关于参数查询的信息见"<a href="prov_paramquery.html">运用查询化查询从数据库中获得数据</a>".
</li>
<li>动态提取成组详细数据:适时提取详细数据集记录并保存在详细数据集中. 要了解更多的有关信息见"<a href="prov_masterdetail.html">创建一个主-从关系:获取详细资料</a>".</li>
</ul>
<br><br>
<p><a name="query"></a> </p>
<h2>指南:使用JBuilder用户界面查询数据库</h2>
<!--BNDX="tutorials:querying databases;database tutorials:creating queries;QueryProvider component:sample;QueryDataSet component:tutorial"-->
<!--BNDX="queries:tutorial;SQL queries:tutorial;creating queries;data:retrieving;retrieving data"-->
<!--BTUTOR="Tutorial: Querying a database using the JBuilder UI"-->
<p>下面的指南说明怎样<code>QueryDataSet</code>组件获得数据.这个例子示范怎样将一个结果集和<code>JdbTable</code>关联起来,使<code>JdbTable</code>能够显示并编辑这些数据.</p>
<p><span class="bscan">注意:</span>我们强烈建议在开始这个称做<a href="prov_textedittutorial.html">"指南:JBuilder数据库应用程序入门"</a>的数据库指南之前先熟悉JBuilder可视化工具.</p>
<p>你可以以在你的JBuilder安装目录下的<code>/samples/DataExpress/QueryProvider</code>子目录中找到该指南例子的完整的示例工程. </p>
<a name="pop"></a>
<h3>通过查询数据库获得数据</h3>
<!--BNDX="data:retrieving with query;query:retreiving data"-->
<p>为了创建一个应用程序并从表中获得数据,</p>
<ol>
<li>
<p>选择 File|Close All菜单,然后选择 File|New.</p>
</li>
<li>双击应用程序图标并接受默认设置创建一个新应用程序. 默认情况下,Frame1.java源文件在内容面板中打开了.</li>
<li>
<p>选中Design标签以激活用户界面设计器.</p>
</li>
<li>
<p>在组件面板的Data Express标签上选中<code>Database</code>组件,然后拖动到用户界面设计器或者拖动到 组件树中. <code>database1</code>被添加到组件树中DataExpress文件夹下,默认情况下是被选中的.</p>
</li>
<li>
<p>在检视器中点击<code>connection</code>属性值域,然后点击省略号按钮打开<code>database1</code>连接属性编辑器.</p>
</li>
<li>
<p>将<code>connection</code>属性值设为JDataStore示例表:EMPLOYEE,设置如下:</p>
<table border="2">
<tr>
<th>Property Name</th>
<th>Value</th>
</tr>
<tr>
<td>Driver</td>
<td><code>com.borland.datastore.jdbc.DataStoreDriver</code></td>
</tr>
<tr>
<td>URL</td>
<td>Use the Browse button to browse to <code>/jbuilder/samples/JDataStore/datastores/employee.jds</code> on your system, then click Open.</td>
</tr>
<tr>
<td>Username</td>
<td>Enter your name</td>
</tr>
<tr>
<td>Password</td>
<td>not required</td>
</tr>
</table>
<p><code>connection</code>对话框包括一个测试连接按钮:Test.点击测试按钮检查连接属性是否已经正确设置. 当连接成功后,点击OK.</p>
<p>要察看在上步中由设计器产生的代码,可以点击Source标签并寻找<code>ConnectionDescriptor</code> 代码. 点击Design标签继续下一步操作.</p>
<p>更多的关于连接数据库的信息,见<a href="con_connecting.html">"连接一个数据库".</a></p>
</li>
<li>现在从组件面板中的Data Express标签中增加一个<code>QueryDataSet</code>组件 <img src="images/qdsbtn.gif" border="0" align="MIDDLE">到你的应用程序中.</li>
<li>在检视器中,点击<code>queryDataSet1</code>的<code>query</code>属性值域,然后点点击省略号打开查询属性编辑器.</li>
<li>
<p>设置下面的属性:</p>
<table border="2">
<tr>
<th>Property name</th>
<th>Value</th>
</tr>
<tr>
<td>Database</td>
<td><code>database1</code></td>
</tr>
<tr>
<td>SQL Statement</td>
<td><kbd>select * from employee</kbd> </td>
</tr>
</table>
<p>点击Test Query按钮确保查询是可运行的.当按钮下方象如下显示<kbd>Success</kbd>成功时,点击 OK关闭对话框.</p>
<p class="bfig">查询对话框</p>
<p><img src="images/queryDescr.gif" border="0" alt="QueryDescriptor"></p>
</li>
<li>
<p>在组件面板中切换到More dbSwing标签并添加一个<code>DBDisposeMonitor</code> <img src="images/dbmonitoricon.gif" border="0" alt="dbmonitoricon.gif">组件到应用程序中.当窗口关闭时该组件会关掉JDataStore.</p>
</li>
<li>
<p>设置<code>dBDisposeMonitor1</code>的<code>dataAwareComponentContainer</code>属性为 'this'.</p>
</li>
<li>选择 File|Save All保存结果.</li>
</ol>
<a name="view"></a>
<h3>创建用户界面</h3>
<p>现在在应用程序中创建用于显示浏览的用户界面.在组件板中选中dbSwing标签并如下操作: </p>
<ol>
<li>在组件树中选中<code>contentPane (BorderLayout)</code>.</li>
<li>将一个<code>JdbNavToolBar</code>组件拖动到设计器上方,并设置它的约束属性为NORTH.</li>
<li>将一个<code>JdbStatusLabel</code>组件拖动到设计器下方,并设置它的约束属性为SOUTH.</li>
<li>将一个<code>TableScrollPane</code>组件拖动到设计器中央并设置它的约束属性值为CENTER.</li>
<li>将一个<code>JdbTable</code>组件拖动到<code>tableScrollPane1</code>中央并设置它的<code>dataSet</code>属性值为<code>queryDataSet1</code>.
<p>你会注意到设计器已经显示一个具有数据的表了.</p>
<p>在设计器中,应用程序看起来应该象这样的:</p>
<p><img src="images/queryd.gif" border="0" alt="Query tutorial in the designer"></p>
</li>
<li>选择 Run|Run Project 运行应用程序并浏览数据.
<p>运行时的程序看起来应该象这样:</p>
<p><img src="images/queryr.gif" border="0" alt="Query tutorial as a running application"></p>
<p>要将数据的改变存入数据源,你能够使用工具栏组件的保存变化按钮,另外可参照<a href="res_resolvingintro.html">"将数据存入数据源"</a>.</p>
</li>
</ol>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -