通过matlab使用mysql时找不到空闲句柄

时间:2011-11-08 05:52:09

标签: mysql matlab

我正在通过fedora13盒子上的matlab访问一个mysql数据库。

问题:我可以成功打开连接,从表读取并关闭与数据库的连接。我可以为多个不同的表重复这个。但是,经过一段时间(2-5次查询)后,我碰壁并且下一个mysql打开调用抛出异常“无法找到自由句柄”。在此之后重新连接到任何数据库的唯一方法是重新启动matlab。我检查了内存中的变量(通过whos)并检查了数据库上运行的进程(show processlist;)但是无法找到阻止我尝试打开连接的内容。

mysql.cpp,似乎MAXCONN可能太低,或者我的mysql关闭可能无法正确处理,但我已经消除了这些可能性。

我希望能够在我的应用程序需要时打开/关闭连接,而无需重新启动matlab以释放数据库句柄。有人可以清楚说明这个过程是如何运作的吗?

3 个答案:

答案 0 :(得分:2)

也许可以考虑编写一个保存连接的函数,只在旧连接消失时才打开新连接。这样你就可以重复使用它。

概述看起来

function conn = hold_connection_a
persistent local_connection
try
  test_connection(local_connection);
catch
  local_connection=establish_connection;
end
conn = local_connection;
然后

establish connection应该是您用来连接和返回句柄的函数。 test_connection应该发送一个简单的查询 - 例如SELECT 1,如果失败则会产生错误。

顺便说一句 - 如果你使用多个数据库,那么拥有多个hold_connections或确保你的语句总是包含数据库名称是有意义的。

无关: 我个人使用mYm因为我发现它更快。

答案 1 :(得分:1)

当您不再需要时,使用close(conn)释放数据库(...)建立的连接。将MAXCONN更改为更高的值只会解决症状,而不是原因。

答案 2 :(得分:0)

您可以看到与

的连接
mysql

没有参数。

mysql('close')

必须解决这个问题。