ubuntu - Sqlite 多次更新

标签 ubuntu sqlite lazarus

我有一个表,用户可以批量更改列,但仅限于一些“喜欢”的记录。例如,一些 邮政编码。

zipcode = 12345  // Need to change this one
zipcode = 23456
zipcode = 12345  // Not this one
zipcode = 34567
zipcode = 12345  // Need to change this one
zipcode = 12345  // Need to change this one
zipcode = 12345  // Not not this one

显然我不能只使用“WHERE zipcode = 12345”

目前我正在创建一个 StringList,其中包含需要更改的每条记录的 recID(一个 AutoInc),然后遍历每条记录

for i:=0 to slChange.Count-1 do
begin
  tStr:=' UPDATE Names SET Zipcode = '80000' WHERE recID = '+QuotedStr(slChange[i])+';';
  dm.sqlEmails.SQL.Text:=tStr;
  dm.sqlEmails.ExecSQL;
end;

如果要更改的记录很多,则需要相当长的时间。

有更好的方法吗?

最佳答案

可以加快代码速度的一件事是使用参数。您只需准备一次查询,这样 DBMS 就不需要重复地解析和计划查询的执行。然后您只发送参数值并调用 ExecSQL .可以提高性能的另一件事是使用分配的 Transaction目的。这是显示上述两件事的代码:

dm.sqlEmails.SQL.Text := 'UPDATE Names SET Zipcode = :ZipCode WHERE RecID = :RecID';

dm.sqlEmails.Transaction.StartTransaction;
try
  for i := 0 to slChange.Count-1 do
  begin
    dm.sqlEmails.Params.ParamByName('Zipcode').AsString := '80000';
    dm.sqlEmails.Params.ParamByName('RecID').AsString := slChange[i];
    dm.sqlEmails.ExecSQL;
  end;
  dm.sqlEmails.Transaction.Commit;
except
  dm.sqlEmails.Transaction.Rollback;
  raise;
end;

关于ubuntu - Sqlite 多次更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347110/

相关文章:

apache - 在 Ubuntu 10 服务器上配置 Tomcat6 + apache2.2 的问题

linux - Ubuntu:Perl 误读带有西里尔字符的文件名

android - sqlite 错误代码 = 1,消息 = 没有这样的表

Java - SQLite 连接(未找到适用于 JDBC :sqlite:main. db 的驱动程序)

java - 拉撒路或Java

python - 使用 Ipython 调用 pylab 的 GUI 请求无效

ubuntu - Ubuntu 上的 MariaDB - 特定版本

java - SQLITE 不幸停止

delphi - Pascal:如何从 ListBox1 中选择项目以在 listBox 2 中显示结果?

delphi - 在Delphi中尝试除了尝试还是最终尝试