使用EGL服务向导快速开发数据库访问服务
来源:互联网 发布:第三方非法软件是什么 编辑:程序博客网 时间:2024/05/14 09:56
使用EGL服务向导快速开发数据库访问服务
简介
在本文中,我们将介绍如何使用EDT服务向导快速开发一个与后端数据库交互的EGL 服务。其他应用程序可以通过该EGL服务修改和查看数据库中的数据,例如创建,读取,更新和删除,也就是我们通常所讲的CRUD。
您也可以使用EDT库向导快速生成一个与后端数据库交互的EGL库,用于被Batch程序和其他库、服务调用,其操作与服务向导相差不大,本文中不再详细介绍。
根据数据库定义生成EGL服务
1. 在EDT中,选择EGLperspective,然后点击文件à新建à其他,在新建对话框中,选择EGLàService。 如下图所示:
2. 输入希望创建的服务名称,该名称将会作为EGL服务类型名以及定义其的源文件名。然后输入包名称,向导将会在该包中创建子包,然后在子包中创建EGL服务类型,以及供该服务和其调用者使用的记录类型和公共函数库等,在下一节中我们将会详细介绍该包的结构。然后,在模板选择框中选择“Service from a database”,点击下一步。
3. 如下图所示,选择EGL服务需要访问的数据库连接,然后选择一个或者多个需要进行CRUD操作的表。
除非数据库配置了默认的schema,否则必须选中复选框“Qualify table names withschema”,不然生成的EGL程序会由于无法发现数据库表而不能进行数据库操作。
若复选框“CreateSQL database binding in the development deployment descriptor”被选中,则向导将会在该EGL工程的部署描述文件中创建一个指向该数据库连接的SQL绑定。同时EGL服务中的Datasource的URI也会被设置为该绑定。如果已存在指向该数据库连接的SQL绑定,则重用现有绑定,不再创建新的绑定。若不选中该选项,您需要手动配置SQL绑定以保证对数据库的正确访问。
注意:
有关配置数据库连接的详细信息,请参见:Creatinga Database Connection Profile
4. 预览将要生成的EGL源文件,然后点击“完成”。
生成代码介绍
1. 包结构
如上节所述,向导将会在EGL工程中创建两个包:
Ø <基包>.<数据库名>
向导将会在该包中创建EGL服务类型,同时,为该包配置Java生成器,用于生成可运行的Java代码。
Ø <基包>.<数据库名>.<common>
在该包中,向导将会生成用于服务调用和数据库访问的Record以及公共函数库。由于该包中的EGL类型不仅需要被EGL服务使用,而且有可能被RUI Handler调用,因此向导为该包同时配置了Java生成器和Javascript生成器
2. EGL服务代码
向导会为所有用户选择的表分别创建四类函数,分别以四个单词为前缀,用于CRUD操作:
Ø add: 用于添加一个或多个记录
Ø get:用于查找一个或多个记录
Ø update:用于更新一个或多个记录
Ø delete:用于删除一个或多个记录
Ø exist:用于判断一条记录是否存在
Ø isValid:用于判断一个EGL记录是否合法。
3. Records
对于用户选择的每一个数据库表,向导都会为其创建一下四个EGL记录:
Ø 用于数据库操作的Entity记录
Ø 用于同时返回一条记录和调用结果状态的记录
Ø 用于同时返回多条记录和调用结果状态的记录
Ø 用于搜索的SearchRecord
上述4个Record 类型会被定义在以该表名为文件名的源文件中。
例如,对于数据库表Customer,向导将会生成下面四个记录类型:
record Customer type Entity{@table{name = "EGL.CUSTOMER"}} customer_id int{@id}; first_name string?; last_name string?; password string?; phone string?; email_address string?; street string?; apartment string?; city string?; state string?; postalcode string?; directions string?;endrecord CustomerWithStatus status Status; data Customer?;endrecord CustomerListWithStatus status Status; data Customer?[]?;endrecord CustomerSearch customer_id int; first_name string?; last_name string?; password string?; phone string?; email_address string?; street string?; apartment string?; city string?; state string?; postalcode string?; directions string?;end
其中,向导在CustomerWithStatus和CustomerListWithStatus中定义了表示返回状态的Status子记录,该Status子记录包含以下三种信息:
Ø Succeeded: 调用是否成功
Ø Code:状态编码
Ø Message:自定义的成功失败信息
服务向导暂时不支持以下几种SQL数据类型,该类型的列将不会被转换为记录中的属性,同时警告信息将会在预览页面中给出。
Ø blob
Ø clob
Ø graphic
Ø time
Ø vargraphic
Ø binary
4 。 ControlStructure
对于开发一个数据库应用,复杂条件的查询是必不可少的,例如多条记录的分页显示。在EGL源文件ControlStructures.egl中,向导定义了ListSpecification 记录,用于定义复杂条件查询时的控制结构。其属性定义如下:
Ø selectClause(String) 用于指定select子句
Ø fromTablesWhere (string) 用于指定 FROM, WHERE以及ORDER BY子句
Ø blockingFactor (int) 用于指定每页的记录数目
Ø position (int) 当前页起始记录的位置
Ø pageCount (int) 符合查询条件的结果集的总页数
Ø rowCount (int) 符合查询条件的记录总数
使用示例
下面的代码将会添加一条新纪录,该记录的各个列的值为:
customer_id = 123first_name = "Forest“last_name = "Liebowitzfunction callAddCustomerService() cust CUSTOMER{customer_id = 123, first_name = "Forest", last_name = "Liebowitz"}; call DataAccessService.addCUSTOMERWithStatus(cust) using new HttpProxy returning to handleAddOperationRes onException handleException;endfunction handleAddOperationRes(retResult CUSTOMERWithStatus in) if(retResult.status.succeeded) syslib.writestderr("Succeeded"); else syslib.writestderr("Error"); endend
下面的代码将会搜索所有Frist_name为“Forest”的记录,并且每次调用最多返回10条记录,用于分页功能。
function searchByFirstName() listSpec ListSpecification{blockingFactor = 10, fromTablesWhere = "FROM EGL.CUSTOMER first_name='Forest'"}; call DataAccessService.getCUSTOMERListWithStatus(listSpec) using new HttpProxy returning to handleSearchRes onException handleException;end
- 使用EGL服务向导快速开发数据库访问服务
- iOS开发使用SOAP访问Web服务
- iOS开发:使用SOAP访问Web服务
- 使用EGL Rich UI访问数据库(引言)
- 使用EGL Rich UI访问数据库(1-4课)
- 使用EGL Rich UI访问数据库(5-8课)
- Web服务快速使用
- 使用 Eclipse 向导进行快速开发
- 使用 Eclipse 向导进行快速开发
- 开发Android硬件访问服务
- 开发Android硬件访问服务
- gsoap快速webservice服务开发
- 开发Android应用程序来使用硬件访问服务
- iOS开发-进阶:使用SOAP访问Web服务
- EGL项目创建向导
- 使用SOAP访问Web服务
- 使用SOAP访问Web服务
- 使用SOAP访问Web服务
- jquery选择器
- 数组去重复
- android开发我的新浪微博客户端-OAuth篇(2.1)
- c++程序设计实验报告《一》(4)
- Learning OpenCV第三章--一些函数
- 使用EGL服务向导快速开发数据库访问服务
- jsp 后台管理中遇到的问题
- 如何修改Linux主机名
- asp.net 操作Access以及一个不同的SQL Server的一个问题
- SEO笔记——外链累计和百度排名的矛盾
- 第四周任务(三)
- 使用HtmlParser 提取百度贴吧中的图片
- 消息和消息队列(Using Messages and Message Queues)
- android 源码下载及编译