📄 prov_querybuilder.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>
<a name="_top_"></a>
<h3>在查询框中设置属性</h3>
<hr>
译者名字:cage_yang(JD012)<br>
邮件地址:<a href="mailto:cage_yang@163.com">cage_yang@163.com</a>
<!--BNDX="SQL Builder;databases:querying;query property:editor;queries:building;SQL statements:defining;QueryDataSet component:query property setting;QueryDescriptor component:setting properties visually"-->
<blockquote class="bsku">应用程序开发是JBuilder专业版本与企业版本的一个特征.分布式应用程序
开发是JBuilder企业版本的一个特征.</blockquote>
<p>点击<code>QueryDataSet</code>的<code>query</code>属性值域的省略号按钮,显示属性编辑器. 你能够
使用查询属性编辑器设置<code>QueryDescriptor</code>属性,但它还有几个其它的用处.查询属编辑器如下所示.
后面将对每个选项加以详述.</p>
<p class="bfig">查询属性编辑器</p>
<p><img src="images/queryDescr.gif"></p>
<p>更多的信息请见<a href="../ref/dx/com.borland.dx.sql.dataset.QueryDescriptor.html">com.borland.dx.sql.dataset.QueryDescriptor</a>,关于<cite>DataExpress库参考</cite>的文档. </p>
<a name="querytab"></a>
<h4>查询页</h4>
<!--BNDX="Query tab;QueryDescriptor component:Query page;query property:understanding;Database field:in QueryDescriptor;SQL Statement field:in QueryDescriptor;Load Options field:in QueryDescriptor;Place SQL Text In Resource Bundle:in QueryDescriptor;resource bundles;load options;SQL Builder;SQL statements:examples"-->
<p>查询标签中,以下先选项是可用的:</p>
<ul>
<li><strong>Database</strong>下拉列表框显示了所有实例化的数据库对象,实例化了数据对象后<code>QueryDataSet</code>
才能够被绑定.一定要正确设置查询属性以便能够成功运行.实例化一个<code>Database</code>,可参见"<a href="con_connecting.html">连接一个数据库</a>".
<p>选择一个<code>Database</code>对象使SQL Builder与Browse Tables按钮能够使用.</p>
</li>
<li>
<p>点击<strong>SQL Builder</strong>按钮显示SQL Builder.SQL Builder提供了一种可视化的数据库方式
,允许你通过选择列、增加一个where语句、排序、组来创建一个SQL语句,可查看并测试生成的SQL语句.</p>
</li>
<li>
<p>点击<strong>Browse Tables</strong>显示可使用数据表与列对话框.数据表与列对话框列出指定数据库
的可用表与你选择的表的列信息.Paste Table与
Paste Column按钮允许你通过粘贴所选中的表名与选中的列名到你的查询语句中来快速创建你的查询语句.
</p>
<p>当数据库域的显示值为"<none>"时,该按钮处于灰色不可用状态.
在数据库域中选择一个<code>Database</code>对象使该按钮可用.</p>
</li>
<li><strong>SQL Statement</strong>是一个JAVA的SQL语句的字符串形式
(典型的是一个SELECT语句). 输入查询语句运行. 使用Browse Tables按钮将选中的表名与列名快速粘贴
到查询语句中.这是一个必需的属性;你一定要指一个有效的SQL语句.如果SQL语句没有返回结果集,会产生
一个异常.
<p>下面是简单的例子:</p>
<p><kbd>从employee表中选择emp_no, last_name, salary三个字段</kbd></p>
<p>下面的SQL语句从同一个表选择所有的字段.</p>
<p><kbd>SELECT * FROM employee</kbd></p>
</li>
<li>
<p><strong>Execute Query Immediately When Opened</strong>选项决定当<code>QueryDataSet</code>
已经打开时是否立即自动执行查询.默认情况下,该选项是选中的,它允许数据当<code>QueryDataSet</code>
已经绑定到一个数据敏感组件时在用户界面设计器显示数据.</p>
</li>
<li><strong>Load Options</strong>是定义将数据装载到数据集的方法的可选的整型值.
这些选项是:
<ol>
<li>Load All Rows:将所有的数据调到前端.
</li>
<li>Load Rows Asynchronously:使<code>DataSet</code>数据行在单独的线程中获取.
它允许<code>DataSet</code>数据能够被访问并被显示.
</li>
<li>Load As Needed:在需要时装载数据.
</li>
<li>Load One Row At A Time:根据需要装载并且使用当前行替换前一行.
</li>
</ol>
</li>
<li>
<p>当<strong>Place SQL Text In Resource Bundle</strong>被选中时,
退出<code>query</code>属性编辑器前,显示Create ResourceBundle对话框.
选择一个资源包类型,当点击OK按钮,SQL语句被写到资源文件中,因此你能够继续为一些应用程序
使用源代码.详见 "<a href="#ressql">在资源包中放置SQL文本</a>"</p>
<p>如果没有选中,SQL字符串作为一个嵌入到源代码的串被写入<code>QueryDescriptor</code>中.</p>
</li>
<li>点击<strong>Test Query</strong>按钮测试SQL语句与对话框中指定的<code>Database</code>属性.
结果("Success"或者"Fail") 显示在Test Query按钮正下方的灰色区域.如果按钮
下方的区域显示成功信息,就运行查询.如果显示失败信息,查找在<code>query</code>输入的信息中是否
有拼写与遗漏错误.
</li>
</ul>
<a name="parameters"></a>
<h4>参数页</h4>
<!--BNDX="Parameters tab:QueryDescriptor;QueryDescriptor component:Parameters tab;parameters:specifying;query property:parameters"-->
<p>在参数标签中,你可以选择一个可选的<code>ReadWriteRow</code>或者<code>DataSet</code>
,在<code>DataSet</code>中填充参数,用于参数化查询.参数值通过一个实例化的<a href="../ref/dx/com.borland.dx.dataset.ReadWriteRow.html"><code>ReadWriteRow</code></a>指定.选择<code>ReadWriteRow</code>对象(或者<code>ReadWriteRow</code>子类),它在下拉列表框中包含用于查询的参数.</p>
<p class="bfig">参数页</p>
<p><img src="images/param.gif" border="0" alt="Parameters page of QueryDescriptor"></p>
<p>任何<code>ReadWriteRow</code>,例如<code>ParameterRow</code>、<code>DataSet</code>、<code>DataRow</code>也许用于查询与过程参数.在一个<code>ParameterRow</code>中,列可能通过<code>addColumns</code>与<code>setColumns</code>方法简单地建立. <code>DataSet</code>与<code>DataRow</code>应该被使用到,如果它们包含所需数据. 作为该问题的一个例子,可见"<a href="prov_paramquery.html">使用参数化查询从数据库中获得数据</a>".</p>
<a name="ressql"></a>
<h4>在资源包中放置SQL文本</h4>
<!--BNDX="SQL queries:resourceable;SqlRes class;Create ResourceBundle dialog box:;resource bundles;bundling resources;QueryDescriptor component:Place SQL text in resource bundle option;Place SQL Text In Resource Bundle:in QueryDescriptor;locale-specific resources:loading;resources:locale-specific"-->
<p>一个<code>java.util.ResourceBundle</code>包含本地化的对象.当你的程序需要一个本地化的资源,
你的程序能够从资源包中加载它以适合当前用户的本地环境.</p>
<p>当<code>query</code>编辑器关闭时,显示Create ResourceBundle对话框,如果一个SQL语句已经在<code>query</code>编辑器中被定义并且"在资源包放置SQL Text"被选中的话.资源包对话框看起来如下所示:</p>
<p class="bfig">资源包对话框</p>
<p><img src="images/resBundle.gif"></p>
<p>要在你的应用程序中使用资源包,</p>
<ol>
<li>选择一个<code>ResourceBundle</code>类型.为了简化事情,JDK提供了两个有用的<code>ResourceBundle</code>子类:<code>ListResourceBundle</code>与<code>PropertyResourceBundle</code>. <code>ResourceBundle</code>类本身是一个虚类.为了创建一个具体的包,你需要从<code>ResourceBundle</code>继承并且具体的某些方法的实现. You can store resources 你可以右击一个属性并指定关键字来存储资源到该包中. Juilder会以正确的格式将字符串写入文件中,其格式取决于类型.
<ul>
<li>
<p>如果你选择<code>ListResourceBundle</code>, 会产生一个.java文件并添加到工程中去.用 <code>ListResourceBundle</code>,消息(或者其它的资源)以二维数组存储在一个java资源文件中. <code>ListResourceBundle</code>是一个虚类.要创建一个能够被加载的实际的包,要从<code>ListResourceBundle</code>继承并实现<code>getContents()</code>方法, 上面的例子中你将创建一个类:</p>
<pre>
package myPackage;
public class myResource extends ListResourceBundle {
Object[][] contents = {
{"Hello_Message", "Howdy mate"}
}
public Object[][] getContents() {
return contents;
}
}
</pre>
</li>
<li>
<p>如果你选择<code>PropertyResourceBundle</code>,一个属性文件将被创建.<code>PropertyResourceBundle</code>是一个具体的类,它需要创建另外一个类来使用它.对于属性资源包, 存储资源是一个扩展名为.properties的文件.当执行一个这种形式的资源包时,你简单地提供一个正确文件名的属性文件并作为那个包中类存储在同一个位置.用上面的例子,你将创建一个myResource.properties文件并把它放在CLASSPATH或者zip/jar文件中,与其它的myPackage包中的类放在一起.这种形式的资源包仅能够存放串,调用起来比象<code>ListResourceBundle</code>基于类的实现要慢得多.然而,它们非常流行因为它们不涉及到处理源代码并且不需要重新编译.该属性文件看起来应象如下所示:</p>
<pre>
# comments
Hello_message=Howdy mate
</pre>
</li>
</ul>
</li>
<li>
<p>点击Cancel或OK按钮:</p>
<p>点击Cancel按钮(或者在<code>query</code>对话框中取消选择"在资源包中放置SQL文本" 选项), 在Frame文件中写一个象下面<code>QueryDescriptor</code>代码.SQL text作为一个串被嵌入在源代码中被写入.</p>
<pre>
queryDataSet1.setQuery(<strong>new</strong> com.borland.dx.sql.dataset.QueryDescriptor(database1,
"select * from employee", <strong>null</strong>, <strong>true</strong>, LOAD.ALL));
</pre>
<p>点击OK按钮创建一个<code>queryDescriptor</code>,如下:</p>
<pre>
queryDataSet1.setQuery(<strong>new</strong> com.borland.dx.sql.dataset.QueryDescriptor(database1,
sqlRes.getString("employee"), <strong>null</strong>, <strong>true</strong>, LOAD.ALL));
</pre>
<p>只要你在<code>QueryDescriptor</code>对话框中保存SQL文本,JBuilder 自动创建一个新的叫做"SqlRes.java"的文件. 它将SQL串放置入SqlRes.java文件并创建一个唯一的串"tag" ,该串插入到文本中.作为一个例子,对一选择语句"<kbd>SELECT * FROM employee</kbd>",如上面输入的,一点击OK按钮,文件SqlRes.java将会被创建,看起来应如下所示:</p>
<pre>
public class SqlRes extends java.util.ListResourceBundle {
static final Object[][] contents = {
{ "employee", "select * from employee" }};
static final java.util.ResourceBundle res = getBundle("untitled3.SqlRes");
public static final String getStringResource(String key) {
return res.getString(key);
}
public Object[][] getContents() {
return contents;
}
}
</pre>
<p>如果SQL语句被改变,变化保存到SqlRes.java. 无须在代码<code>jbInit()</code>中作改变,因为"tag"串是不变的.</p>
</li>
</ol>
<p>更多的关于资源包的信息,见Java文档的<code>java.util.ResourceBundle</code>,
在JBuilder帮助中选择Help|Java Reference.然后选择<code>java.util</code>包与<code>ResourceBundle</code>类.</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -