json处理blob字段

json处理blob字段

webapi统一使用json传输数据,而数据库的blob字段是比较特殊的字段。

json使用字符串来保存blob字段的值。那么blob字段的值需要编码为字符串:base64或bin.hex。

blob字段值编码成base64字符串以后,体积会增大1.5倍;编码成bin.hex以后,体积会增大2倍。但bin.hex编(解)码速度比base64快,且数据库中blob字段也是保存的bin.hex。因此我们使用bin.hex编码。

1)将blob字段编码为bin.hex字符串,然后写入json对象

  TBinHex.Encode(LField, LStr);//blob字段编码为bin.hex字符串
  JsonObject.S[LField.FieldName] := LStr;//bin.hex字符串写入json对象

2)将json对象保存进blob字段

      LDataSet := LRequestData.A['data'];
      LDB := LPool.Lock;
      LDB.StartTrans;
      LDB.qry.Close;
      LDB.qry.SQL.Clear;
      ldb.qry.Params.Clear;
      for i := 0 to LDataSet.Count - 1 do
      begin
        LRecord := LDataSet.Items[i] as TJsonO;
        LDB.qry.SQL.Add('insert into t2(f1,f2) values (:f1,:f2)');
        LDB.qry.ParamByName('f1').AsWideString := LRecord.S['f1'];
        LStream.Clear;
        TBinHex.Decode(LRecord.S['f2'], LStream);//json解码进流
        LStream.Position := 0;
        LDB.qry.ParamByName('f2').LoadFromStream(LStream, ftBlob);//将流写入blob字段
      end;
      LDB.qry.ExecSQL;
      LDB.CommitTrans;

 

posted @ 2025-06-01 14:40  delphi中间件  阅读(131)  评论(0)    收藏  举报