Quantcast
Channel: Oracle Bloggers
Viewing all articles
Browse latest Browse all 19780

利用ADF在10分钟内创建一个SQL查询Web客户端

$
0
0

有人怀念iSQL*Plus吗?想不想自己做一个?

本文描述如何通过ADF创建一个简单的、执行单一SQL查询并展示其结果集的Web应用。

步骤一:创建一个FusionWeb Application,并建立ModelViewController两个项目。

步骤二:在Model里创建一个Application Module,并生成其JavaClass

步骤三:在ApplicationModule的配置里,设置数据库连接为JDBC URL,这样做可以避免在WebLogic上创建显式的JDBC datasource

步骤四:在ApplicationModuleJava Class中添加三个方法。描述如下:

1.      clearQuery: 能够移除一个名为”X”ViewObject。你总不愿意在执行了多次查询之后看见OutOfMemory冉冉升起吧。此处”X”将是我用来封装任意查询命令的ViewObject的名字。


publicvoid clearQuery(){      
 ViewObject vo = this.findViewObject("X");     
 if(vo!=null){         
  vo.remove();}  
}

2.      prepareQuery: 实为创建一个名为”X”ViewObject,此处我们并不需要执行正真的查询,将来应该利用ADF BindingIterator自动执行。该方法中,查询作为形参传入。


public void prepareQuery(String query) {
 this.clearQuery();     
 this.createViewObjectFromQueryStmt("X", query);
}

3.      getQueryResult: 返回查询的结果。


public ViewObject getQueryResult(){       
 returnthis.findViewObject("X");    
}

步骤五:将紧前步骤的三个方法全部暴露为Application Module的客户端接口。

此时你的Data Control应该变成这样了:

步骤六:在ViewController项目中创建一个新页面view1

步骤七:将prepareQuery的形参query抛入view1

作为Input Text:

步骤八:将prepareQuery的方法自身抛入view1


作为Button:

至此,页面看上去是这样的:

步骤九:创建一个有边界的任务流,页面类型为jsff

步骤十:在有边界任务流中创建一个新页面名为bview1

步骤十一:将getQueryResult的方法返回return抛入bview1

自动作为一个动态表,代码可以自动生成:

步骤十二:将整个有边界的任务流作为Region抛入view1

作为View1中的一个Region,用来展示查询的结果:

此时,你的View1应该长成这样了:

步骤十三:为prepareQuery按钮添加一个setActionListener,为一个变量赋值,通过这个变量控制结果显示Region的刷新。

步骤十四:在view1的页面定义文件中找到作为Region的任务流设置,添加RefreshCondition这一属性。


现在,你可以运行view1了。检查一下效果。

输入select * fromhr.employees,点击prepareQuery:



恭喜你,一个简单的web SQL查询工具就这样完成了。请看一下手表,过去了几分钟?

当然,我的这个例子是简化到极限的ADF例子,甚至没有使用显性声明的managed bean。还有很多问题需要处理、许多逻辑需要梳理,比如处理大结果集时需要在ViewObject上做出调整,实现分页;为了使分页的接口更人性化至少需要managed bean的帮助等等。

还有一个彩蛋等着大家,在同一个页面上你第二次执行查询试一下,有什么问题?尝试着解决一下。

最后,稍微和布局控件交涉一下你当然会得到漂亮得多的界面。

开发这回事从来不是一小篇blog能解决的,

需要进一步讨论?戳这里:http://www.databi.cn/thread-89-1-1.html



Viewing all articles
Browse latest Browse all 19780

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>