- 浏览: 2060568 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
转自:http://www.delphibbs.com/delphibbs/dispq.asp?lid=3982520
【架构简介】交流QQ:110401920注明:三层delphi
架构以delphi作为客户端,Java作为服务端,oracle作为后台数据库数据。
其中delphi客户端的封装为了保持与原来的开发方式兼容都是基于TclientDataSet实现的;
delphi客户端通过Socket直接以流的的形式与Java服务端进行交互;
架构的通信过程如下:
请求开始->打包压缩请求数据->发送请求数据->delphi端阻塞等待->Java端多线程响应请求->解压解包请求数据->处理请求->打包压缩处理结果->发送处理结果->
delphi端停止阻塞接收处理结果->解压解包处理结果->显示结果
架构主要解决以下问题:
1.如何将Java从数据库中读出来的数据打包成TClientDataSet可以读取的数据包;要解决这个问题就需要深入了解TclientDataSet的DataPackage的xml格式。
2.如何将新增-修改-删除后的TClientDataSet数据通过Java保存到数据库中;要解决这个问题就需要深入了解TclientDataSet的Delta属性。
3.如何处理Oracle的大对象字段类型(clob或blob)。
4.delphi端如何调用Java端定义的对应的业务逻辑供。
5.Java端多用户并发处理效率问题。
6.数据包的格式定义,打包解包,压缩解压,加密解密等问题。
7.其他扩展功能。
【架构实现】
1.【TclientDataSet的DataPackage格式】
TclientDataSet的DataPackage格式一般如下:
<?xml version="1.0" standalone="yes" ?>
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
<FIELD attrname="PORT_ID" fieldtype="fixed" WIDTH="12" />
<FIELD attrname="OP_STATE" fieldtype="fixed" DECIMALS="1" WIDTH="38" />
<FIELD attrname="B_POL" fieldtype="fixed" WIDTH="38" />
<FIELD attrname="PORT_CUSTOMS_CODE" fieldtype="r8" />
<FIELD attrname="B_DEL" fieldtype="fixed" WIDTH="38" />
<FIELD attrname="B_SEA_PORT" fieldtype="r8" />
<FIELD attrname="PORT_AIRCODE" fieldtype="string" SUBTYPE="FixedChar" WIDTH="1" />
<FIELD attrname="PORT_SEACODE" fieldtype="string" SUBTYPE="FixedChar" WIDTH="2" />
<FIELD attrname="CREATE_DATE" fieldtype="dateTime" />
<FIELD attrname="B_BASIC" fieldtype="string" WIDTH="55" />
<FIELD attrname="EDI_CODE3" fieldtype="fixed" WIDTH="38" />
<FIELD attrname="B_LOCAL" fieldtype="fixed" DECIMALS="2" WIDTH="10" />
</FIELDS>
<PARAMS />
</METADATA>
- <ROWDATA>
<ROW PORT_ID="10" OP_STATE="20.0" B_POL="3" />
<ROW PORT_ID="1" OP_STATE="2.0" B_POL="3" />
</ROWDATA>
</DATAPACKET>
2.【DataPackage的结构分析】
整个XML定义了一个DataPacket;DataPacket包括两个部分:MetaData和RowData。
MetaData包括Fields和Params,即包括数据字段定义和数据集参数。
RowData为具体记录。 下面详细分析数据字段定义的方法。
Field节点的定义主要包括:
1>attrname指FieldName
2>fieldtype指字段类型
3>width指需要宽度的字段类型的宽度或数字的有效位数;
4>decimals指小数点右边的位数;
Oracle主要字段类型具体的对应信息如下表:
_____________________________________________________________________
OracleType | fieldtype | WIDHT | SUBTYPE | DECIMALS
_____________________________________________________________________
Char string 1 FixedChar
---------------------------------------------------------------------
Char(n) string n FixedChar
---------------------------------------------------------------------
Varchar(n) string n
---------------------------------------------------------------------
Varchar2(n) string n
---------------------------------------------------------------------
data dateTime
---------------------------------------------------------------------
Number(s,p) fixed s p
---------------------------------------------------------------------
Number(*,p) fixed 38 p
----------------------------------------------------------------------
Number(s) fixed s
----------------------------------------------------------------------
Number fixed 38
----------------------------------------------------------------------
int fixed 38
----------------------------------------------------------------------
Smallint fixed 38
----------------------------------------------------------------------
Dec(s,p) fixed s p
----------------------------------------------------------------------
Float R8
----------------------------------------------------------------------
Real R8
----------------------------------------------------------------------
其中用SubType属性来帮助决定类型。表中没有值的单元格,表示该属性没有用到。
并且DataPakage中如果想包含中文的话,记得要在第一句的中间加上encoding=”GB2312”,否则用数据库相关控件读出来的只会是乱码。
记住位置很重要的。你必须写成下面的形式:
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
如果写成下面的也是不满足形式良好的规范的:
<?xml version="1.0" standalone="yes" encoding="GB2312"?>
3.【XML的转义字符】
在XML语言中,用实体对特殊字符进行转义.
如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。
在XML文档中预定义好了五个实体:
小于号(<),大于号(>),和(&),单引号('),双引号(")
实体必须以符号"&"开头,以符号";"结尾。
注意: 只有"<"字符和"&"字符对于XML来说是严格禁止使用的。
剩下的都是合法的,为了减少出错,使用实体是一个好习惯。
4.【Oracle的大对象字段类型(clob和blob)】
因为TclientDataSet不支持clob和blob等大对象字段类型,所以我们要使用别的方法来实现相应的读写操作;
5.【关于TClientDataSet的Delta属性】
TClientDataSet.Delta属性表示当前操作的ClientDataSet中记录变化的信息
Delta信息可以用另外的ClientDataSet来显示;如myCDS.Data := OrgCDS.Delta
TclientDataSe的UpdateStatus属性反映当前记录的更新状态; 根据更新数据的情况其可能的值分别为:
1.新增一条记录时,在Delta中会有一条记录,标记为usInserted;
2.修改记录时,在Delta中对于同一条记录会产生且仅产生两条记录:第一条为原始记录,标记为usUnmodified,第二条只有修改过的字段才有值,标记为usModified
3.刪除记录时,在Delta中会产生一条记录,标记为usDeleted;
根据以上Delta属性就可以生成相应的更新SQL语句;
6.【数据包的格式定义】
6.1.数据包采用变长字符串的方式组织,一般由数据节点和分隔符及结束符组成。具体结构如下图:
|------------|-------|------------|-------|------------|-------| ... |-------|
| 数据节点 |分隔符 | 数据节点 |分隔符 | 数据节点 |分隔符 | ... |结束符 |
|------------|-------|------------|-------|------------|-------| ... |-------|
6.2.数据节点一般由数据长度和数据值组成。
6.3.当数据值的长度小于等于999时数据节点的组成如下图:
|---------|----------|-------|---------|------------|-------| ... |-------|
|数据长度 | 数据值 |分隔符 |数据长度 | 数据值 |分隔符 | ... |结束符 |
|---------|----------|-------|---------|------------|-------| ... |-------|
6.4.当数据值的长度大于999时数据节点的组成如下图:
|-----|---------------|---- |---------|------------|-------| ... |-------|
|003 |数据长度的长度 | / |数据长度 | 数据值 |分隔符 | ... |结束符 |
|-----|---------------|-----|---------|------------|-------| ... |-------|
6.5数据包格式定义说明:
数据长度为数据值长度的长度字符串;
数据长度的长度为数据值长度的长度字符串的长度字符串;
分隔符一般为冒号;当数据值的长度大于999时分隔符为"/";
7.【JAVA应用服务器】
应用服务器最重要的就是稳定,支持高效的多用户并发处理;所以应用服务器应该是无状态的;然后是易于部署的;
java天生就是用来编写服务器的;成熟的j2ee企业级应用;丰富的开源思想;于是java就成了实现应用服务器的不二选择;
JAVA应用服务器具体实现以下功能:
1>使用一个ServerSocket监听Delphi客户端发送请求的命令;
2>针对每个Delphi客户端发送的请求开启线程解析处理请求;通过JAVA端的多线程来达到高效处理多用户并发的情况。
3>通过反射和command设计模式来分派Delphi端请求的相应的业务逻辑对象进行处理;
3>通过JDBC与Oracle数据库交互;
其实只要数据到了java端,那么只要你愿意你可以选择任意的中间件技术:weblogic,websphere,jboss等等作为应用服务器,
而尽想其提供的丰富的管理功能;
8.【接口规划】
*************************************************************************************************************************
函数功能: 发送操作命令和数据到应用服务器
函数声明: function StreamCommand(ASendText:WideString;ASendStream:TStream=nil):TStream;stdcall;external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ASendText 要发送的字节数据(一般应包括命令信息)
-------------------------------------------------------
ASendStream 要发送的内存流或文件流等数据(默认为nil)
-------------------------------------------------------
函数说明:正常返回字节流数据(可能返回空串);异常返回nil;此函数一般供DLL中的接口函数调用;
用例:Result:=StreamCommand('013SelectCommand:045SELECT * FROM CRM_CUSTOMER WHERE B_COMPANY=1 :');
这个语句的意思是发送一个查询命令到AppServer,命令的内容为SELECT * FROM CRM_CUSTOMER WHERE B_COMPANY=1;
如果命令能正确执行,那么AppServer会把查询的结果打包发送到客户端,以字节流的形式返回.
**************************************************************************************************************************
函数功能: 查询单个数据集
函数声明: function SelectCommand(ACDS: TClientDataSet;const ASelectText: string):Boolean;stdcall;external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ACDS 存放查询结果集的TClientDataSet
-------------------------------------------------------
ASelectText 要发送的单条查询语句
-------------------------------------------------------
函数说明: 成功返回[true](包括只有数据元的空数据集);失败返回[false]
用例: Result:=SelectCommand(cdsTemp,'SELECT * FROM CRM_CUSTOMER');这个语句的意思是:
发送一个查询语句到AppServer,如果命令能正确执行,那么AppServer会把查询的结果集打包发送到客户端事先创建好的cdsTemp中.
*************************************************************************************************************************************
函数功能:同时查询多个数据集
函数声明:function SelectCommands(ACDS:Array of TClientDataSet;const ASelectText: TStringList):Boolean;stdcall;external Communication;
参数说明:-------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ACDS 存放查询结果集的多个TClientDataSet列表
-------------------------------------------------------
ASelectText 要发送的多条查询语句列表
-------------------------------------------------------
函数说明:成功返回[true](包括只有数据元的空数据集);失败返回[false]
用例:
var
sSql:string;
sList:TStringList;
cdsTemp1,cdsTemp2,cdsTemp3:TClientDataSet;
begin
try
cdsTemp1:=TClientDataSet.Create(nil);
cdsTemp2:=TClientDataSet.Create(nil);
cdsTemp3:=TClientDataSet.Create(nil);
sList:=TStringList.Create;
try
sSql:='SELECT * FROM Table1';
sList.Add(sSql);
sSql:='SELECT * FROM Table2';
sList.Add(sSql);
sSql:='SELECT * FROM Table3';
sList.Add(sSql);
//把第一条查询语句的结果集存放到cdsTemp1,把第二条查询语句的结果集存放到cdsTemp2,依次类推存放顺序
SelectCommands([cdsTemp1,cdsTemp2,cdsTemp3],sList);
finally
if Assigned(cdsTemp1) then FreeAndNil(cdsTemp1);
if Assigned(cdsTemp2) then FreeAndNil(cdsTemp2);
if Assigned(cdsTemp3) then FreeAndNil(cdsTemp3);
if Assigned(sList) then FreeAndNil(sList);
end;
except
end;
end;
**************************************************************************************************************************
函数功能: 发送一条或多条update or insert or delete类型的SQL语句到应用服务器执行
函数声明: function ExecuteCommands(const AExecuteText: TStringList): integer;stdcall;external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
AExecuteText AppServer能解析的SQL语句
-------------------------------------------------------
函数说明: 正常返回0;异常返回非0;本函数主要供ApplyUpdates函数调用;
用例:
**************************************************************************************************************************
函数功能: 发送一条update or insert or delete类型的SQL语句到应用服务器执行
函数声明: function ExecuteCommand(const ACommandText:WideString):integer; stdcall;external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ACommandText 要执行的SQL语句
-------------------------------------------------------
函数说明: 正常返回0;异常返回非0;
用例:
**************************************************************************************************************************
函数功能: 根据数据集列表的修改信息自动生成相应的SQL语句
函数声明: function CreateUpdates(const ATableNames: array of string ;ACDS:array of TClientDataSet;var sSqlList:string): Boolean;stdcall; external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ATableNames 数据集列表对应的表名列表
-------------------------------------------------------
ACDS 修改过的数据集列表
-------------------------------------------------------
sSqlList 存放对应生成的SQL语句
-------------------------------------------------------
函数说明: 成功返回[true];失败返回[false]
本函数根据数据集中的修改信息自动生成Insert,Update,Delete类型的多条SQL语句.
用例: 1>Result:=CreateStatement(['TableName1','TableName2','TableName3','TableName4'],[cds1,cds2,cds3,cds4]); 或者
2>Result:=CreateStatement(['TableName1'],[cds1]);
本用例会根据数据集列表中每个数据集的修改信息自动生成相应的SQL语句,这样就完成了操作界面到SQL语句之间的直接映射.
**************************************************************************************************************************
函数功能: 更新多个数据集
函数声明: function ApplyUpdates(const ATableNames: array of string ; ACDS:array of TClientDataSet): Boolean;stdcall; external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ACDS 要更新的数据集列表
-------------------------------------------------------
ATableNames 要更新的表名列表
-------------------------------------------------------
函数说明: 成功返回[true];失败返回[false]
表名列表与数据集列表应该一一对应
用例: Result:=ApplyUpdates(['TableName1','TableName2','TableName3','TableName4'],
[cds1,cds2,cds3,cds4]);
本用例会根据数据集列表中每个数据集的修改信息自动生成相应SQL语句,然后把所有的SQL语句一起发送到AppServer进行事务处理.
*****************************************************************************************************************
函数功能: 保存Oracle大对象字段类型(clob或blob)
函数声明: function SaveBlob(SqlText:WideString;LobID:WideString;LobContent:TStream):integer;stdcall; external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
SqlText 保存前要执行的SQL语句
-------------------------------------------------------
LobID 包含Oracle大对象字段类型的记录的ID
-------------------------------------------------------
LobContent 要保存的Oracle大对象字段类型的内容
-------------------------------------------------------
函数说明: 成功返回[0];失败返回[非0]
用例:
*****************************************************************************************************************
函数功能: 显示Oracle大对象字段类型(clob或blob)
函数声明: function SelectBlob(LobID:WideString):TStream;stdcall; external Communication;
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
LobID 包含Oracle大对象字段类型的记录的ID
-------------------------------------------------------
函数说明: 成功返回Oracle大对象字段类型对应的流;失败返回[nil];
用例:
9.【扩展功能】
1>客户端数据缓存机制保证运行的高效性:客户端可以缓存大量的客户端数据,并提供了一定程度的离线操作功能;
这样在提高户交互效率的同时,减少网络数据通讯量;还能降低服务器的负载。
2>客户端自动更新机制:便于客户端的部署和版本更新
3>权限管理:包括功能权限和数据权限;
4>客户端采用模块化(DLL)设计保证系统的可扩展性;
5>运行时自定义报表;
6>JAVA应用服务器可采用数据库连接池来提高访问效率;
发表评论
-
form打开时的关闭代码
2011-10-25 20:29 1577摘自:http://topic.csdn.n ... -
TUpdateSQL更新问题 提示Update Failed
2011-08-29 20:26 1240摘自:http://topic.csdn.net/u/200 ... -
图解如何用Eurekalog跟踪程序错误
2011-08-12 07:28 944图解如何用Eurekalog跟踪程序错误 摘自:h ... -
VirtualBox 复制VDI 并能创建新的虚拟机
2011-07-21 11:14 2741摘自:http://www.nonabyte.net/how- ... -
截获所有异常 不报错
2011-07-12 16:52 1242摘自:http://media.ccidnet.c ... -
delphi exe程序以及DLL程序如何在模块内部获得各自的路径
2011-07-11 16:38 1307delphi Exe程序以及DLL程序如何在模块内部获得各自的 ... -
Delphi文本文件读写
2011-07-11 14:55 1252Delphi文本文件读写 (2008-10-31 1 ... -
Delphi自定义的消息的使用
2011-05-31 14:12 2317阅:已验证,可通过; 摘自:http://blog.1 ... -
怎么查看OutputDebugString输出的信息?debugview
2011-05-25 16:02 3835网上很多说用debugview查看,我自己写了一个程序,里面用 ... -
Delphi里查看该变量的内存值
2011-05-25 13:32 1126Delphi里查看该变量的内存值:Run==>Evalu ... -
注册表操作 写入autorun启动项,键值为本程序的全路径
2011-05-20 15:40 1826procedure TForm4.Button2Click ... -
报说包frx7和frxdb7都包含了某个单元的错误
2011-05-11 09:59 10271. 问题描述:在安装FastReport3的时候,安装到- ... -
Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
2011-05-03 14:34 1465摘自:http://blog.csdn.net/g ... -
WM_USER的说明 用户消息ID
2011-04-28 10:46 1689WM_USER 摘自:http://baike.bai ... -
ToolButton不能改变大小
2011-04-28 10:38 3464问题描述:ToolButton不能改变大小? 问 ... -
Delphi里TOOLBAR 上的button的caption为什么显示不出来啊
2011-04-20 17:55 1771Delphi里TOOLBAR 上的button的caption ... -
delphi指针简单入门
2011-04-11 21:42 1159摘自:http://topic.csdn.net/t/2003 ... -
Delphi中paramstr的用法 应用程序间传递数据
2011-04-01 14:33 2107Delphi中paramstr的用法 应用程序间传递数据 ... -
Delphi中的THashedStringList对象 --大数据量时
2011-04-01 13:54 5151Delphi中的THashedStringLi ... -
inherited Create(AOwner); 和直接写inherited有区别吗
2011-03-26 15:44 1325摘自:http://zhidao.baidu.com/que ...
相关推荐
### 三层架构Delphi+Java+Oracle模式的实现 #### 架构简介 该架构采用的是典型的三层架构设计,具体来说是以Delphi作为客户端、Java作为应用服务端、Oracle作为后台数据库的一种组合形式。这样的设计既能够发挥各...
随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,...
随着OA应用内容的不断扩展,OA技术也在不断发展,从过去的BASIC+文件系统到VB+ACCESS、DELPHI+ORACLE等等,到目前基本形成了三大主流技术: 1. .net+关系型数据库(RDB)技术 基于.net+RDB的办公平台则以简单、灵活...
如果您对于三层结构的理论已经有所了解,可以在第二章中学习如何使用CICS编制应用,并且使用VB、Delphi、C++ Builder、PowerBuilder、Java和C进行前台界面的开发。如果要进一步使用CICS的底层功能,第四章的...
Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...
- **DataSnap**:Delphi内置的一个服务器端组件,用于构建高性能的中间层应用程序,支持多种数据交换格式,如JSON、XML等。 - **DBX**:用于处理数据库连接和数据交换的组件集合。 #### 四、基于Delphi开发B/S结构...
- **2.2.2 软件的开发架构**:从两层到三层结构,以及分布式结构,如C/S架构的客户端-中间件-数据库服务器模式,以及B/S架构的浏览器-服务器模式。 - **2.2.3 软件的开发方式**:包括自主开发、委托开发、合作开发和...
5. **三层架构实现**:理解并应用三层架构(表示层、业务逻辑层、数据访问层),使系统具有更好的模块化和可维护性。 6. **关键技术与问题解决**:在编程过程中,可能会遇到一些技术难点,如错误处理、性能优化、...
系统分析与设计部分可能涵盖系统功能分析、概念模型、数据表结构、三层架构设计和类的设计等。系统实现部分则涉及数据库实现、程序界面设计、操作流程、关键技术及代码、调试中遇到的问题等。总结部分需列出完成的...
- 系统分析与设计部分应涵盖系统功能、概念模型、数据表结构、三层架构和类的设计等。 - 系统实现部分应包括数据库实现、程序界面、操作说明、关键技术和代码、调试问题等。 - 总结需列出已完成的功能、使用的...
- 系统分析及设计:系统功能分析、概念模型、数据表结构、三层架构、类的设计等。 - 系统实现:数据库实现(SQL脚本)、程序界面、界面操作、关键技术及实现代码、调试中遇到的问题等。 - 总结:结论、下一步工作...
系统分析与设计应涵盖功能分析、概念模型、数据表结构、三层架构和类的设计等。系统实现部分则需要展示数据库实现、程序界面、操作、关键技术及实现代码、调试中遇到的问题等。 7. **《图书管理系统》设计**:设计...
例如,教师档案管理系统、网上学习及考试系统、高校学生信息管理系统等,这些系统通常采用三层架构,包括表现层、业务逻辑层和数据访问层。 6. **嵌入式系统**:ARM处理器和WinCE平台的项目涉及到嵌入式系统开发,...
- **技术测试框架(IBM Framework)**:这是一种三层架构的测试框架,主要包括 appobjects、tasks 和 testcases 三个部分。其中 appobjects 用来存储应用程序 GUI 元素的信息;tasks 存储通过 AUT 常见路径的可重用...
分析与设计部分涉及功能分析、概念模型、数据表结构、三层架构、类设计等。实现部分包括数据库脚本、界面、操作、关键技术及调试问题。总结部分涵盖已完成的功能、技术、下一步计划、个人收获等。 - 附录包括数据库...
9. **PCB设计工程师**:需要三年以上Layout工程师经验,设计过4层以上PCB板,熟悉高频电路设计和EMC相关知识。应熟练运用Orcad、PROTEL等EDA软件,负责元器件库的建立和维护,确保PCB板的准确无误。 10. **FPGA...
具体来说,系统由操作系统层、基础数据库层和应用服务层三个层次组成。 2. **技术构架标准**:支持多种操作系统(如Windows NT、Windows 2000、Windows 2003等)、数据库(如Oracle、DB2、SQL Server、Sybase等),...
该系统采用三层架构设计,前端界面由Delphi编写,提供了直观友好的用户交互体验。中间层采用Java技术,负责业务逻辑的处理和数据的传输,确保了系统的稳定性和可扩展性。后台数据库则采用了Oracle,以其强大的数据...
- **开发工具**:VC、VB、C#、ASP.NET、Java、Delphi等。 - **数据库**:SQL Server、Oracle、DB2、Sybase等。 - **应用程序类型**:Windows界面程序(C/S)或Web界面程序(B/S)。 #### 2. 设计报告 - **格式要求*...
作为开发平台,SuSE Linux Enterprise Server 9默认提供了C/C++、Tcl、Perl、Python、Shell等多种开发语言和调试工具,还支持Java、Delphi等第三方开发语言,为开发者提供了丰富的选择。此外,它还包含了构建企业...