我正在通过fedora13盒子上的matlab访问一个mysql数据库。
问题:我可以成功打开连接,从表读取并关闭与数据库的连接。我可以为多个不同的表重复这个。但是,经过一段时间(2-5次查询)后,我碰壁并且下一个mysql打开调用抛出异常“无法找到自由句柄”。在此之后重新连接到任何数据库的唯一方法是重新启动matlab。我检查了内存中的变量(通过whos)并检查了数据库上运行的进程(show processlist;)但是无法找到阻止我尝试打开连接的内容。
看mysql.cpp,似乎MAXCONN可能太低,或者我的mysql关闭可能无法正确处理,但我已经消除了这些可能性。
我希望能够在我的应用程序需要时打开/关闭连接,而无需重新启动matlab以释放数据库句柄。有人可以清楚说明这个过程是如何运作的吗?
答案 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')
必须解决这个问题。