将JSON对象插入数据库

时间:2012-02-09 14:32:53

标签: json delphi datasnap

我正在使用Delphi XE2构建一个DataSnap服务器,而且我很难找到插入客户端将我发送到数据库的JSON对象的最佳方法。

这是我收到的对象的格式:

{"PK":0,"FIELD1":"EXAMPLE","FIELD2":5, "DATE":""}

我找到的解决方案是以下代码

with qryDBMethods do
  begin
    SQL.Text := 'SELECT * FROM Table';
    Open;
    Append;
    FieldByName('PK')    .AsInteger := StrToInt(newId.ToString)
    FieldByName('FIELD1').AsString  := Object.Get('FIELD1').JsonValue.Value;
    FieldByName('FIELD2').AsInteger := StrToInt(Object.Get('FIELD2').JsonValue.Value); 
    FieldByName('DATE')  .AsDateTime:= Now;    
    Post;

之后,我会将我的查询组件制作成JSON对象并返回给我的客户端,但问题是,这将是一个具有密集表的大应用程序,所以每次我想做一个“SELECT *”插入一些东西并不理想。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:8)

请尝试使用INSERT语句。

with qryDBMethods do
  begin
    SQL.Text := 'INSERT INTO Table (PK, FIELD1, FIELD2) VALUES (:PK, :FIELD1, :FIELD2)';
    ParamByName('PK')    .Value:= StrToInt(newId.ToString)
    ParamByName('FIELD1').Value := Object.Get('FIELD1').JsonValue.Value;
    ParamByName('FIELD2').Value:= StrToInt(Object.Get('FIELD2').JsonValue.Value);    
    ExecSQL();

答案 1 :(得分:2)

如果打开Select * From Table时数据量有什么问题,为什么不执行Select * From Table Where 1 <> 1之类的操作?

通过这种方式,您可以在不加载任何结果的情况下插入。

其他选项会改为使用Insert脚本。