我正在使用数组DML操作,以加快将大量记录插入到SQL数据库中的速度。该原则在这里进行了描述。以下是如何使用此功能的示例代码:
TFDQuery *FDQuery1;
...
FDQuery1->SQL->Text = "insert into MyTab values (:p1, :p2, :p3)";
// here FDQuery1->Params collection is filled by 3 parameters
const int array_size = 100;
FDQuery1->Params->ArraySize = array_size;
FDQuery->Prepared = true;
for(int i = 0; i < array_size; i++)
{
FDQuery1->Params[0]->AsIntegers[i] = i;
FDQuery1->Params[1]->AsStrings[i] = "qwe";
FDQuery1->Params[2]->Clear(i);
}
FDQuery1->Execute(array_size);
基本上,这意味着我不是为每一行插入数据调用数据库引擎客户端函数,而是首先将需要插入的数据准备成数组。数组的典型大小为1000个项目。然后,我使用数组作为参数调用客户端函数。不幸的是,在文档中没有描述参数数组的内存何时被释放。当我取消准备查询时是否会释放?
TFDQuery *query;
...
query->Prepared = false;
还是在我关闭查询时完成?
query->Close();
当我将数组大小设置为1时,是否已经完成了操作?
query->Params->ArraySize = 1