当数据库连接问题发生时,如数据库服务器关闭而不是SQL问题,我需要进行特殊处理。
在源代码中,我们可以获得各种异常,但哪些异常属于连接异常?
我们希望如果出现这种问题,可以减少日志。
已编辑
我有很多方法可以执行与数据库的连接,但是所有方法都从同一个方法(initSession)获取会话: 这是一个例子:
private Session initSession(HibernateUtil hibernateUtil) {
Session oSession = null;
try {
oSession = hibernateUtil.getSession();
} catch (Exception e) {
log.error("unable to log, Please check the details of your database");
}
return oSession;
}
public List findAlerts(int pFirstLine, int pNbElement) throws AnalyzerException {
List oAlerts = new ArrayList();
Session oSession = initSession(lHibernateUtil);
try {
oAlerts = AlertFinders.instance().findAlertByStatus(oSession, false, pFirstLine, pNbElement);
Iterator iterAlerts = oAlerts.iterator();
while (iterAlerts.hasNext()) {
...
}
} catch (UnableToLocateObjectException eU) {
throw new AnalyzerException(eU.getMessageSource(), eU.getClassNameSource(), eU.getMethodSource(), eU);
} finally {
oSession.close();
}
return oAlerts;
}
答案 0 :(得分:1)
多种可能的方式。
运行参数示例:jdbc:oracle:thin:@localhost:1521:XE系统mypassword123 oracle.jdbc.driver.OracleDriver
public class DbConnCheck {
public static void main(String[] args) throws Exception {
String url = args[0];
String username = args[1];
String password = args[2];
String driver = args[3];
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
try {
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("SELECT SYSDATE FROM DUAL");
while(rs.next()) {
System.out.println(rs.getObject(1));
}
} finally {
conn.close();
}
}
}
编辑:添加有关hibernate部分的详细信息 没有在Hibernate中完成,但准确地说,您可以检入连接池配置。
如果使用c3p0,那么请检查如何最好地使用idle_test_period,preferredTestQuery和testConnectionOnCheckout等设置; 如果使用dbcp,那么validationQuery可以完成这项工作。
如果你想将c3p0与Hibernate和Spring一起使用,请检查this链接