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;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18906109

浙公网安备 33010602011771号