Java 如何知道SQLException是由于数据库连接失败引起的

Java 如何知道SQLException是由于数据库连接失败引起的,java,exception-handling,Java,Exception Handling,在我的java应用程序中,由于数据库连接失败,日志文件有大量SQLException跟踪。每5秒尝试一次。所以我必须知道,SQLException进入日志的原因要么是数据库连接失败,要么是sql查询中发生了一些错误。所以,如果数据库连接失败发生在这两次之间,并尝试记录三到四次以上的时间,那么我可以将其限制为在1分钟后写入 public static synchronized void log( Exception e, boolean forcePrint) {

在我的java应用程序中,由于数据库连接失败,日志文件有大量SQLException跟踪。每5秒尝试一次。所以我必须知道,SQLException进入日志的原因要么是数据库连接失败,要么是sql查询中发生了一些错误。所以,如果数据库连接失败发生在这两次之间,并尝试记录三到四次以上的时间,那么我可以将其限制为在1分钟后写入

public static synchronized void log( Exception e, boolean forcePrint) { if(sqlExceptionLogTime!=null && e instanceof SQLException &&((new Date()).getTime()-sqlExceptionLogTime.getTime())<60000){ // do nothing }else if ( (forcePrint || debugFlag) && (logStream != null)) { e.printStackTrace(logStream); logStream.flush(); logcount++; if(e instanceof SQLException){ sqlExceptionLogTime = new Date(); } } } 公共静态同步作废日志(异常e,布尔forcePrint) {
如果(sqlExceptionLogTime!=null&&e SQLException&&((新日期()).getTime()-sqlExceptionLogTime.getTime())您可以使用错误代码并检查它是否存在以下失败情况

Exception e;
int errorCode = e.getErrorCode();
if(errorCode==4005)
{
//do whatever you want to do for failed connection
}

您可以用单独的
try catch
块包装连接到数据库的指令和执行查询的指令。实际上,数据库连接代码在应用程序中的许多位置都被写入,但日志异常代码只在一个位置写入,所以最好从日志代码处理,这样您就已经做错了。Yo你的代码架构很差。请修复它。