有没有更好的方法上传记录集与JSON或其他?

时间:2015-03-21 21:03:07

标签: php mysql json web-services delphi

我有firebird数据库,需要将一个数据库表上传到web上的远程mysql服务器。有数千条记录,我不知道如何上传这些记录。我可以用JSON逐个上传记录。我正在使用POST方法。

如何一次或部分上传所有记录?

更新1:此代码适用于逐个数据更新。但它就像是这样的洪水袭击。我想上传我一次选择的所有数据。

Delphi 7 Side HTTP Post方法

function PostURLAsString(aURL: string; code:string): string;
var
  lHTTP: TIdHTTP;
  lStream: TStringStream;
  parameters: TStringList;

begin
  lHTTP := TIdHTTP.Create(nil);
  lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
  lStream := TStringStream.Create(Result);
  try
    Parameters := TStringList.Create;
    parameters.Add('code=' + code);
    lHTTP.Post(aURL, parameters,lStream);
    lStream.Position := 0;
    Result := lStream.ReadString(lStream.Size);
  finally
    FreeAndNil(lHTTP);
    FreeAndNil(lStream);
  end;
end;

逐个上传记录:

procedure TForm1.Button1Click(Sender: TObject);
var
  js:TlkJSONobject;
  jb: TlkJSONbase;
  s: String;
  code:string;
begin
  IBQuery1.First;
  with IBQuery1 do
  while not Eof do
  begin
    code :=   VarToStr(FieldValues['code']);
    s := PostURLAsString('http://www.domain.com/uitems.php', code);

    js := TlkJSON.ParseText(s) as TlkJSONobject;
    jb := js.Field['items'];

    if VarToStr(jb.Child[0].Field['status'].Value) = '1' then
      ListBox1.Items.Add(code + ' is inserted')
    else
      ListBox1.Items.Add(code + ' is not inserted');

    Application.ProcessMessages;

    js.Free;
    Next;
  end;
end;

PHP端 uitems.php

<?php
  include_once dirname(__FILE__) .'/DBConnect.php';

  function update($code){

    $db = new DbConnect();

    // array for json response
    $response = array();
    $response["items"] = array();   

    $sqlstr = "INSERT INTO items (`code`) VALUES ('$code')";

    $result = mysql_query($sqlstr);



    $tmp = array();

    if ($result) {
        // successfully updated
        $tmp["status"] = 1; //inserted
    } else {
        $tmp["status"] = 0; //not inserted
    } 

    array_push($response["items"], $tmp);

    header("Content-Type: application/json; charset=utf-8", true);      
    // echoing json result
    echo json_encode($response, JSON_UNESCAPED_UNICODE);

  }

  update($_POST["code"]);

?>

1 个答案:

答案 0 :(得分:2)

您可以使用JSON发送数据数组。只需在Delphi端准备该数组,将其发送到您的脚本并对您的数组的每个项执行查询。您也可以返回一个数组,其中包括您上传的每个数组项的成功消息。