• go和delphi对数据库查询数据基于结构的遍历


    go和delphi对数据库查询数据基于结构的遍历

    在结构面前,go的rows,delphi的Tdataset,都是和谐的。特意整理了2篇GO和DELPHI的对比,试图提示跨语言、平台 数据标准的真像。

    GO没有Tdataset,但有rows

    func UnitsQryPB(w http.ResponseWriter, r *http.Request) {
    	// /pb/{service}/units/qry/{dbid}
    	url := strings.Split(r.URL.Path, "/")
    	dbid := url[5]
    	db := getDB(dbid)
    	if db == nil {
    		return
    	}
    	sql := "select * from tunit"
    	rows, err := db.Query(sql)
    
    	defer rows.Close()
    	defer db.Close()
    
    	if err != nil {
    		public.Log(err)
    		return
    	}
    	var arr Unitss
    	for rows.Next() {
    		var dw Units
    		rows.Scan(&dw.Unitid, &dw.Unitname)
    		arr.UnitsArr = append(arr.UnitsArr, &dw)
    	}
    	data, _ := proto.Marshal(&arr)
    	if public.UseGzip {
    		data, _ = public.GZIPEn(data)
    	}
    	w.Write(data)
    }
    

      DELPHI没有rows,但有Tdataset

    function select(url: string; body: TBytes): TBytes;
    var
      db: tdb;
      pool: tdbpool;
      arr: TArray<string>;
      serial: TgoProtocolBuffer;
      rows: TtunitArray;
      i: integer;
      res: TRes;
    begin
      serial := TgoProtocolBuffer.Create;
      try
        try
          arr := url.Split(['/']);
          pool := GetDBPool(arr[4]);
          db := pool.Lock;
          db.qry.Close;
          db.qry.SQL.Clear;
          var where: string := '';
          if high(arr) >= 5 then
            where := ' where ' + TNetEncoding.URL.Decode(arr[5]);
          db.qry.SQL.Text := 'select * from tunit' + where;
          db.qry.Open;
          if db.qry.isempty then
          begin
            rows.status := 0;
            rows.exception := 'No found any data.';
            result := serial.Serialize<TtunitArray>(rows);
            exit;
          end;
          SetLength(rows.tunits, db.qry.RecordCount);
          db.qry.First;
          i := 0;
          while not db.qry.Eof do
          begin
            rows.tunits[i].unitid := db.qry.fieldbyname('unitid').asstring;
            rows.tunits[i].unitname := db.qry.fieldbyname('unitname').asstring;
            rows.status := 1;
            rows.message := 'success';
            inc(i);
            db.qry.Next;
          end;
          result := serial.Serialize<TtunitArray>(rows);
        except
          on E: Exception do
          begin
            res.status := 0;
            res.exception := E.message;
            result := serial.Serialize<TRes>(res);
          end;
        end;
      finally
        pool.Unlock(db);
        serial.Free;
      end;
    end;
    

      

  • 相关阅读:
    MySql使用游标Cursor循环(While)更新数据
    初试TinyIoCContainer笔记
    用Razor做静态页面生成器
    在CentOS6.5上安装MariaDB
    mono的远程调试
    mono3.2.3+Jexus5.5+openSuSE13.1的asp.net
    mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战
    第一节知识点:.net与c#的概念
    支付宝支付功能(使用支付宝sdk)
    vs2017/vs2019 去掉 单击aspx文件预览页面
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/16502971.html
Copyright © 2020-2023  润新知