android框架连接mysql_三层架构 android访问MSSQL数据库 程序 (服务器端)

Delphi Xe5开始支持Android编程了。Delphi的春天终于来了!

我也是刚接触XE,以前一直都在用D7,一直都在等它支持Android今天终于等来了,可以开始做项目了,虽然XE还存在很多BUG,但我相信,Embarcadero在努力,我们也在努力!

下面我们来做一个三层架构,访问数据库的程序。

一、服务器端

1、建立主程序

New-other-webService-SOAP Server Application

d479463de5c76a0676fd1b58712ed296.png

起名为: ServerFrm

在WebModal模块里加入如下控件:

1ebd265c22eb781b23d0eea78e68e917.png

加入:FDConnection1、FDQuery1、DataSetProvider1 、ClientDataSet1、 FDPhysMSSQLDriverLink1

ClientDataSet1.ProviderName := DataSetProvider1;

DataSetProvider1.DataSet := FDQuery1;

FDQuery1.Connection := FDConnection1;

右击FDConnection1 选Connection Editer

3cbc113d05d4befc97a8b8442714dd62.png

填好Driver ID: MSSQL

DataBase 、 User_name 、 Password、 Server 等信息。 OK!

在 public 声明

function TWebModule1.GetXMLData(str: string): TBytes;

然后在下在定义

function TWebModule1.GetXMLData(str: string): TBytes;

begin

with ClientDataSet1 do

begin

Close;

CommandText := str;

Open;

Result := ZCompressStr(XMLData);

Close;

end;

end;

这里的ZCompressStr函数是压缩ClientDataSet的XMLDATA以减少传输流量,客户端再进行解压即可。

记得加入USES zlib;

保存为 WDMForm.pas

三、我们在自动生成的ServerFrmImpl.pas里定义一个函数:

public

function GetData(str: string): TBytes; stdcall;

uses WDMForm;

function TDLMobileServer.GetData(SQL: string): TBytes;

var WebModuleClass: TWebModule1;

begin

WebModuleClass := TWebModule1.Create(nil);

try

Result := WebModuleClass.GetXMLData(SQL);

finally

WebModuleClass.Free;

end;

end;

这里的SQL是接收来自客户端的SQL语句。

4、我们在自动生成的ServerFrmIntf.pas里定义一个函数;

function GetData(str: string): TBytes; stdcall; //这里只需要声明

这里已经完成服务器端的设计,点RUN

5cfecc8003d44ddea1e9ce3df1482307.png

再点Open Browser

009c73d2c6ef95854931f41dc809a911.png

我们在此可以看到服务器端定义的函数: GetData

点START 服务器就配置完成了。

下一章我们来读客户端的设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。 今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。 业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent) private b_insertFlag :Boolean; b_updateFlag :Boolean; b_deleteFlag :Boolean; d_rowVersion :double; procedure setInsertFlag(pInsertFlag :Boolean); function getInsertFlag: Boolean; procedure setUpdateFlag(pUpdateFlag :Boolean); function getUpdateFlag: Boolean; procedure setDeleteFlag(pDeleteFlag :Boolean); function getDeleteFlag: Boolean; procedure setRowVersion(pRowVersion :double); function getRowVersion:double; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published property bInsertFlag: Boolean read getInsertFlag write setInsertFlag; property bUpdateFlag: Boolean read getUpdateFlag write setUpdateFlag; property bDeleteFlag: Boolean read getDeleteFlag write setDeleteFlag; property dRowVersion: double read getRowVersion write setRowVersion; property POLEData:OleVariant read GetOLEData write SetOLEData; end;TUserVO = class(TValueObject) private id: string; name: string; password: string; 。。。。。。。。。。 VO的列表:TValueObjectList = Class(TObjectList) private ValueObject: TValueObject; ClassName: TClass; procedure setClassName(pTmpClsName :TClass); function getClassName: TClass; procedure setValueObject(pTmpVO :TValueObject); function getValueObject: TValueObject; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published function AddItem(index: integer; AObject: TObject ):Integer; virtual; function GetItem(index, itemid: integer ): TObject; virtual; function CountItem:Integer; virtual; public constructor Create; virtual; destructor Destroy; override; procedure AfterConstruction; override; property PClassName: TClass read getClassName write setClassName; property POLEData: Ole
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值