使用delphi 开发 web(五)Android 与delphi 服务器交互访问数据库

     近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 应用。

   

 

 

 

时间: 2024-10-25 00:34:41

使用delphi 开发 web(五)Android 与delphi 服务器交互访问数据库的相关文章

使用delphi 开发 web(三)动态脚本里面使用数据库

在主程序里面把数据库访问控件设置并注册好,在脚本里面使用数据库就非常简单. 可以类似下面的脚本访问数据库. <%uses SysUtils, Classes;var   aaa,rndnum,bb:string;   i,num:integer; begin  with cx do    begin        sql.clear;        sql.add('select * from soft');        open;      while not cx.eof do     

使用delphi 开发 web(二)动态脚本的实现

   看了前面的文章同学,都会认为delphi 开发web比较麻烦,没有PHP 和ASP 方便. 因为每次要改动网页的内容,就要重新编译一次,重新发布一次,这样也太麻烦了.那么我们就 做一个类似PHP 的动态web 服务器吧,一次编译发布后,就不用再改了,网站内容需要变化时,只 需要修改脚本就可以了. 先看看下面的代码: <% var    i:integer; begin for i:=1 to 10 do   print('ok'); %>  <p> 你好<p> &

Delphi开发Web Server程序返回图像的方法

Internet/Intranet在九十年代可能是最流行的计算机术语了,不管是计算机行业内的人士还是计算机外的人士,都会使用Internet/Intranet,有的查资料,有的是宣传自己和公司,甚至有许多以前从没有想到用Internet的东西现在也在用Internet来解决, 比如有的程控数字计算机维护用Internet来解决.在这一切应用之中,基于Web Server的应用程序的开发是基本点,但如何开发Web Server的程序呢? Delphi 3是Borland公司1997年推出的可视化.

Delphi开发Web应用程序打印组件

一.慨述 近些年来,随着互联网的普及和推广,传统的单机模式和局域中的c/s模式的应用程序越来越不能满足信息共享的要求.因此,一种新的基于浏览器的b/s的应用程序的开发方式被提了出来.新的开发方案以其客户端的免维护.免配置.程序能根据服务器的信息能够自动更新升级;服务器端多层模式的应有提高处理的效率和安全性越来越被广大的应用程序的开发者所看好.成为应用程序开发的一个新的发展方向.在windows的平台上,人们利用asp来开发服务的显示界面,而用组件来封装商业规则,在各种杂志上利用各种工具进行组件开

用Delphi开发Web服务数据库程序

第一步:编写服务器的应用程序 首先在Delphi的IDE中选择"File|New|Other-",然后在WebServices页面中选择Soap Server Application图标. 然后在New Soap Server Application对话框中选择Web App Debugger executable. 点击OK按钮之后,Delphi会自动生成一个WebModule,在这个Module中会包含三个WebServices的控件. 然后然后在WebServices页面中选择S

使用delphi 开发 web(四)使用ajax 与extjs交互

     随着现在各种js 框架(例如extjs,Jquery)的迅猛发展,很多网站都开始使用这些框架开始设计 web 页面,而且为了提高用户体验,大量使用了AJAX 技术,可以动态实现很多网页内容, 本文就以extjs 的grid 为例,介绍一下使用webbroke的服务器 与js 框架的交互. 先看一下下面的页面: 这个页面动态显示一个人员工资表,并可以实现翻页,这是一个典型的extjs  的grid. 其页面代码如下:  <!DOCTYPE HTML PUBLIC "-//W3C//

前端开发-Web前端 二级菜单移植

问题描述 Web前端 二级菜单移植 web前端新手,好多都还不懂,还请多多指教.需要的效果如图,在鼠标悬停在按钮位置,出现二级菜单开发-Web前端 二级菜单移植-移动web 二级菜单联动"> 以下是需要移植的代码 <ul class="verticals-nav red red"> <li><a href="#"><i class="icon-briefcase"></i>

最强大的Delphi RIA Web构架群,领略Delphi开发BS的强大威力,Java差远了

问题描述 CBXRIA框架几乎是国产多Delphi层框架中最好的一个,同时体现SmartClient和RIA思想.CBX的Demo服务器换地址了,所以请大家到这个地方体验,CBXRIADemo(需要客户端初始化):有关CBXRIA的评论:刚创建的CBXRIA讨论区CBXRIA案例:欢迎加入最强大的DelphiRIABS构架群,领略Delphi开发BS的强大威力,Java差远了主讨论群:53623431(已满)第二群:16169282(已满)第三群:63756040(已满)第四群:64740999

032_《Delphi下用Intraweb开发WEB程序应用实战(第二版)》

<Delphi下用Intraweb开发WEB程序应用实战第二版> Delphi 教程 系列书籍 (032) <Delphi下用Intraweb开发WEB程序应用实战第二版> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作 者:高勇 内容简介 IntraWeb是Delphi自带的一套Web开发框架,它由Atozed Software公司(http://www.atozedsoftware.com)在2002年制作,并完美的植入Delphi7中.I