如何连接到perl中的多个数据库,如果它无法连接到一个数据库,则无需保存数据库?如果我有一个数组中的数据库名称并在循环中进行搜索,我想尝试连接并执行查询并断开连接。我将把它报告给我们的大哥哥服务器监控页面。如果脚本无法连接到脚本,我不希望脚本终止,因为它显然需要检查数组中的每一个脚本。现在我使用DBI模块状态方法,但我不知道它是否正常工作。感谢大家的时间!连接到perl脚本中的多个数据库
回答
我们可以看到代码吗?我不认为DBI->connect()
通话将死,除非你明确告诉它,如:
DBI->connect($dsn, $user, $pass) or die "Can't connect: $DBI::errstr\n";
我敢肯定,即使使用{RAISEERROR => 1}不会让它自动熄灭。所以,如果你打电话or die...
就不要这样做!
编辑:
鉴于@squiguy发布的代码,我会做这样的:
foreach my $host (@hosts) {
$dbh = DBI->connect("dbi:Oracle:; host=$host; port=$port", $username, $password);
next unless $dbh;
if ($dbh->state()) {
# Do stuff with state information
}
}
您应该查看Perl中的异常处理。我不使用Perl,所以我不知道异常处理的语法,应该很容易找到在线。
我非常熟悉如何做到这一点,但我无法找到任何异常继续通过,他们都似乎退出。(@hosts){dbh = DBI-> connect(“dbi:Oracle :; host = $ host; port = $ port”,$ username,$ password);感谢您的输入,尽管 – squiguy 2012-03-07 18:58:20
我在数组中的数据库名称和走线槽他们在一个循环中,我想尝试连接并执行查询并断开连接。
如果你正在循环,没有理由打开多个数据库。在你的循环中,打开一个数据库,做你的事情,并关闭。
如何连接到perl中的多个数据库,如果它无法连接到一个数据库,则无需保存数据库?
我假设这是在你的循环中。无论何时执行任何可能会出错的Perl命令并停止执行程序,都可以始终使用eval
。
你做这样的事情:
for my $database (@database_list) {
my $dbh;
eval {
$dbh = DBI->connect($database, $user, $password);
};
if (not [email protected]) {
yadda, yadda, yadda
}
}
的eval
将捕捉任何类型的普通致命的错误。如果[email protected]
有值,则呼叫失败,并且eval
返回错误说明。如果[email protected]
为空,则无错误,您可以继续。
但是,默认情况下,如果DBI不能连接,DBI不会自动死亡。相反,它只是返回一个未定义的值。您应该能够用它来确定您是否已经成功,还是需要去到一个数据库:
for my $database (@database_list) {
my $dbh = DBI->connect($database, $user, $password);
if ($dbh) {
yadda, yadda, yadda
}
}
如果我没有记错,有一个名为RaiseError的属性,如果集将导致程序死在失败的DBI调用中。但是,应该不设置默认值,所以你不应该有任何问题。
我会给这个镜头,看看会发生什么,谢谢你为我指出。 – squiguy 2012-03-07 21:21:17
- 1. Perl脚本无法连接到Oracle数据库
- 2. 连接到数据库 - 脚本建议?
- 3. 在Perl脚本中建立数据库连接时出错?
- 4. 多个数据库连接
- 5. 多个数据库连接
- 6. 多个数据库连接
- 7. QSqlDatabase连接到多个数据库
- 8. 动态连接到多个数据库
- 9. StackExchange.Redis连接到多个数据库
- 10. Java连接到多个数据库
- 11. 数据库中的多个连接
- 12. Rails中的多个数据库连接
- 13. 连接到SSIS脚本任务中的SQL数据库
- 14. 连接到awk脚本中的数据库
- 15. 如何连接到bash脚本中的oracle数据库?
- 16. 适用于数据库连接的多语言脚本
- 17. php sqlite在几个脚本中使用数据库连接
- 18. HSQLDB无法连接到与Android的数据库脚本?
- 19. 连接到数据库时运行无限的Python脚本
- 20. Django独立数据库脚本 - 太多连接错误
- 21. php - 与数据库的多个连接
- 22. 连接到我使用下面的代码连接到MySQL数据库的数据库的Perl
- 23. 连接到很多数据库时的django和数据库连接池
- 24. Perl模块 - 共享数据库连接
- 25. 连接到多个数据库中的Active Record
- 26. 连接到mongodb中的多个数据库
- 27. 如何连接到休眠中的多个数据库
- 28. 连接到MVC Web应用程序中的多个数据库
- 29. 用数据库处理Perl脚本
- 30. 从Selenium Java测试脚本连接到MySQL数据库失败
'foreach my $ host if($ dbh-> state())' 我基本上正在执行连接,然后使用状态来查看它是否连接。这似乎不适用于我。如果你得到了我想要做的或者我需要解释更多,请告诉我。谢谢 – squiguy 2012-03-07 19:14:31
如果连接失败,'$ dbh'将会是未定义的,'$ dbh-> state()'调用将是一个致命的运行时错误。说'if($ dbh && $ dbh-> state())...'来代替。 – mob 2012-03-07 20:16:35
是的,用@mob回答。你也可以把它们分解成单独的测试,这样你就可以判断你是否无法连接,或者如果状态重新调整一个错误的值。 – 2012-03-07 20:24:24