zoukankan      html  css  js  c++  java
  • 实现用一个QueryService支持多数据库访问

    上图,是在服务端定义多个数据库,准备在客户端通过“联接名称”及“客户端服务名称”访问这些数据库。

    基于实现的MultiDBQueryService,将其注册为一个指定客户端服务名称的服务,如下图:

    这里,只要设置客户端服务名称及服务类名称即可。其他项不用设置,客户端服务名称设置为djwkQueryService,服务类名称设置为TMultiDBQueryServicve

    客户端通过kbmMWClientQuery查询指定的数据库:

    procedure TTestForm.Button1Click(Sender: TObject);
    begin
      kbmMWClientQuery1.QueryService:='djwkQueryService';//在服务端定义的客户端服务名称
      kbmMWClientQuery1.QueryServiceVersion:='1.0';
      kbmMWClientQuery1.Query.Text:='Select * from sys_versioninfo';
      kbmMWClientQuery1.ActiveClient.Data:='djexam';//在服务端定义的数据库联接名称
      kbmMWClientQuery1.Open;
    end;

    上面代码,通过kbmMWClientQuery.ActiveClient.Data属性设置为服务端定义的数据库联接名称,这样,就可以查询指定的数据库了!

    另外,在MultiDBQueryService中还实现了一个方法,用来取得服务端所有可用的数据库联接列表,参数表式返回内容的格式,支持两种:有逗号分隔的字符中和Json格式。

    procedure TTestForm.Button2Click(Sender: TObject);
    begin
           Label1.Caption:=c.Request('djwkQueryService','1.0','GetConnectionNameList',['string']);
    end;

    上面的调用,返回结果用逗号分隔,如:hblexam, djexam, djwkexam, zhjg, djet, lsWeb, TestInfo, xmyt, test, dmjh

    把返回的结果再分解,加入一个Combox中,如下图:

    下面是分解的代码:

    procedure TTestForm.Button2Click(Sender: TObject);
    var
      s:string;
      sa:TArray<string>;
      I: Integer;
    begin
         s:=c.Request('djwkQueryService','1.0','GetConnectionNameList',['string']);
         sa:=s.Split([',']);
         for I := Low(sa) to High(sa) do
         begin
              ComboBox1.Items.Add(sa[i]);
         end;
    ComboBox1.ItemIndex:=0;
    end;

    下面是调用GetConnectionNameList,返回Json字符串,并解析到ComboBox1中:

    procedure TTestForm.Button2Click(Sender: TObject);
    var
      s:string;
      I: Integer;
      jo:TJSONObject;
    begin
    
      s:=c.Request('djwkQueryService','1.0','GetConnectionNameList',['json']);//返回json格式
      jo := TJSONObject.ParseJSONValue(s) as TJSONObject;
      for i := 0 to jo.GetValue<TJSONArray>('data').Count - 1 do
      begin
           ComboBox1.Items.Add(jo.GetValue<String>('data[' + i.ToString + '].SessionName'));
      end;
      jo.Free;
    
    end;

    这个方法返回json格式的string,如:'{"data":[{"SessionName":"hblexam","Description":""},{"SessionName":"djexam","Description":""}]}'

    现在,kbmMW通用服务器KinglandSoftServer更灵活的实现了两种方式来支持多数据库的功能实现!

    下图演示了具体的效果:

     

    上图,显示通过GetConnectionNameList按钮取得服务端的所有数据库联接,放入一个ComboBox中供选择不同的数据库联接,Query按钮,按选择的数据库联接,查询数据。

  • 相关阅读:
    JXOI2018简要题解
    TJOI2018简要题解
    BJOI2018简要题解
    【题解】Luogu P4091 [HEOI2016/TJOI2016]求和
    【题解】Luogu P5301 [GXOI/GZOI2019]宝牌一大堆
    【题解】Luogu P5291 [十二省联考2019]希望
    【题解】Luogu P3349 [ZJOI2016]小星星
    【题解】Luogu P5327 [ZJOI2019]语言
    【题解】Luogu P5319 [BJOI2019]奥术神杖
    【题解】Luogu P5471 [NOI2019]弹跳
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/10794861.html
Copyright © 2011-2022 走看看