2

我正在 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 *”不理想。做这个的最好方式是什么?

4

2 回答 2

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();
于 2012-02-09T14:44:55.193 回答
2

如果问题是您打开 a 时的数据量Select * From Table,为什么不做类似的事情Select * From Table Where 1 <> 1呢?

这样您就可以在不加载任何结果的情况下插入。

其他选项将改为制作插入脚本。

于 2012-02-09T14:46:15.100 回答