保持连接活动 - mysql

t1f*_*t1f 5 mysql sql delphi dbexpress

我已经使用名为的按钮设置了我创建的delphi应用程序Connect.单击它后,它将执行以下代码:

begin
    someConnection.Connected:=true;
    somecomenziDataSet.Active:=true;
end;
Run Code Online (Sandbox Code Playgroud)

同样地,我有一个按钮用于Disconnect做同样的事情,但是= false;

我的问题是我连接的数据库托管在共享主机帐户上,而mysql服务器的wait_timeout变量设置为60秒,interactive_timeout设置为30秒.当然,如果我不使用我的应用程序60秒,这将断开我.

有没有办法让这个连接保持活力?

托管公司不会改变设置,所以我坚持使用它.

我正在使用RAD Studio 10 Seattle,dbexpress组件TSQLConnection和我的数据库mysql

如果我留下任何必要的信息,请在评论中告诉我,谢谢!

kob*_*bik 8

您可以使用a TTimer来定期"ping"数据库(例如,给定60秒超时的间隔为10-20秒):

procedure TMyDataModule.ConnectionPingTimer(Sender: TObject);
begin
  if not MySQLConnection.InTransaction then
    MySQLConnection.Exceute('DO 0', nil); // or "SELECT 1" or whatever is cheapest
end;
Run Code Online (Sandbox Code Playgroud)

  • "DO 0"和"DO 1"之间没有区别,它们在不返回值的情况下计算表达式,而不是返回结果集的"SELECT 0"或"SELECT 1".然而,网络流量的差异是可以忽略的.另见:http://stackoverflow.com/q/2546868/937125 (2认同)