近2年,随着智能手机及平板电脑的快速发展,同时伴随着3G 网络的逐渐普及,移动开发越来越受到开发人员的青睐,而谷歌推出的Android 系统以其开放、优秀很快受到开发人员的推崇,很多知名网站都推出了Android 客户端版本,例如腾讯、新浪、淘宝都有对应的版本。同时很多数据库应用程序都从原来的windows 桌面程序延伸到移动设备上,由于移动设备的性能及内存等肯定无法与台式机及笔记本电脑相比,因此访问数据库也不可能像桌面安装各种数据库的客户端,当然目前绝大多数数据库也没有直接运行在移动设备的客户端。因此可以通过http 服务器中间建立一道桥梁,实现Android 访问远程数据库。

由于目前delphi 不支持Android 开发(据说XE3 可能会通过firemonkey 实现对Android 的支持),因此本人目前使用的Basic4android 开发Android 客户端。主要是B4A 除了语法是类basic, 其他非常类似delphi,支持可视化设计,隐藏了很多不需要的细节。

其实在客户端开发非常像前面的extjs,只是需要写一些代码从服务器端下载对应的JSON,然后对对应的JSON 解析,再显示到对应的界面上。

服务器端的脚本很简单:

<%

uses SysUtils, Classes;
var
start,limit,sort,dir,phonenum,pass,sysnf:string;
s,czh:string;
plist:Tstringlist;
begin

start:=request.queryfields.values['start'];
limit:=request.queryfields.values['limit'];
sort:=request.queryfields.values['sort'];
dir:=request.queryfields.values['dir'];

phonenum:=request.queryfields.values['phonenum'];
pass:=request.queryfields.values['pass'];
sysnf:=request.queryfields.values['sysnf'];

if phonenum='' then
begin
print('error111');
exit;
end;
if pass='' then
begin
print('error111');
exit;
end;

if sysnf='' then
begin
print('error222');
exit;
end;

with cx do
begin
sql.clear;
sql.add('select * from CZYB where sysnf=:sysnf and dxjsm=:phonenum ');
params[0].asstring:=sysnf;
params[1].asstring:=phonenum;

open;

if isempty then
begin
print('error111');
exit;
end;
czh:=fieldbyname('CZH').asstring;
end;


try
plist:=Tstringlist.create;
s:='select XH,XM,LYDSMC,to_char(CJSJ,''yyyy-mm-dd'') as CJSJ from xsjlb a where a.nf=:NF and nvl(a.lyqxdm, a.lydsdm) ';
s:=s+' in (SELECT dm FROM CZYSFB WHERE CZH=:CZH AND SYSNF=:NF AND SYSBZ=''T'') ';
if sort<>'' then
s:=s+' order by "'+sort+'"'+ ' '+dir;
plist.add('CZH='+czh);
plist.add('NF='+sysnf);


wm.datatojsonzip( s,'0','500',plist);
finally
plist.free;
end;
end.

%>

和前面extjs 的略微不同的是 datatojsonzip 函数,这个函数是在datatojson 的基础上增加了压缩功能。因为使用3G 的话,一定要控制网络流量(唉,3G 什么时候10元包月呢?),

我做的系统经过测试原来的664 条数据的JSON 封装文本的大小约为64.3 KB,经过压缩后,生成的压缩流约为8.97 KB,不到原来大小14%,

大大的提高了网络传输效率及访问数据库的速度,也减少了网络流量,节省了上网费用。

同时随着移动终端及网络的快速发展,网络上数据传输的安全问题也越来越大,一旦出现安全问题,系统的信息就会泄漏失密,导致不可预测的后果。

而WEB应用服务器在互联网上是通过HTTP 协议传输信息,都是通过明码传输的,可以通过软件或者硬件的方法得到HTTP传输的内容,这一点是非常不安全的,

当然可以通过HTTPS 实现安全传输,但是需要在服务器上安装证书,客户端也必须支持HTTPS,实际应用中比较麻烦,因此考虑自行加密传输内容,

并在客户端通过短信等方式给信任终端下发解密密码,Android 设备使用下发(可通过短信或邮件等方式)的密码进行解密,恢复原始数据。

同时为了保证系统的通用性,服务器和客户端都采用3DES 来加密和解密。

在Android 终端里面解析JSON 也很简单,代码如下:

Sub loadxinxi(s As String)
Dim JSON As JSONParser
Dim Master As Map
Dim records As List

Dim XINXI As Map

Dim recordcount As String
ClearAll
Dim h(4) As String
h(0)="序号"
h(1)="姓名"
h(2)="地市"
h(3)="日期"

NumberOfColumns = h.Length
ColumnWidth = SV.Width / NumberOfColumns 'update the columns widths
ColumnWidth_1 = ColumnWidth-ColLineWidth
SetHeader(h)
If s.Length<20 Then
Msgbox("没有报名信息","提示")
Return
End If
JSON.Initialize(s)
master = JSON.NextObject

records=master.Get("topics")

Dim data(4) As String
Dim row() As String

showcount=records.Size
For i=0 To showcount-1

XINXI=records.Get(i)
data(0)=xinxi.Get("XH")
data(1)=xinxi.get("XM")
data(2)=xinxi.get("LYDSMC")
data(3)=xinxi.get("CJSJ")

row =data
AddRow(row)
Next
recordcount=master.Get("totalCount")
h(0)="合计"
h(1)=recordcount&"条"
h(2)=""
h(3)="前"&showcount&"条"
setfooter(h)


End Sub

最后的运行界面为


Delphi web 开发今天就暂时告一个段落,现在我们实现的delphi web 功能基本上都是直接连接数据库的, 中间没有实现数据库的缓存和池,也没有实现业务逻辑,因此比较适合中小型网站的使用,后面我会开始介绍 多层开发,介绍完后,再把多层与现在的web 开发结合起来,真正实现企业级的web 应用。

更多相关文章

  1. 还原Android彩信数据库
  2. 支付宝客户端架构解析:Android 容器化框架初探
  3. Android——基于Android Studio开发备忘录客户端
  4. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行
  5. Android客户端与PHP服务端的数据交互
  6. android客户端和网站数据交互的实现(基于Http协议获取数据方法)
  7. Lync 2010 手机客户端登录体验

随机推荐

  1. Android(安卓)饺子播放器
  2. 关于android.view.WindowLeaked(窗体泄露
  3. 点击Android(安卓)SDK Manager时,SDK Mana
  4. Android学习笔记——常用的基本UI组件及
  5. Android打开其它APP的两种方式
  6. [Android]Activity生命周期+启动模式
  7. Android(安卓)Kikat下由图片Uri获取Path
  8. android studio 打包过时警告问题解决方
  9. AndroidStudio使用偷懒插件Butterknife和
  10. Android(安卓)横竖屏切换时候Activity的