我有一个Java应用程序,该应用程序使用Spring JDBCTemplate在MySQL数据库中进行连续不间断的快速插入。几分钟后,数据库上显然发生了某些事情,断开了数据库连接,并且出现了异常
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
我能够用代码捕获SQLException,因此在这一点上,我想重新建立数据库连接并退出catch块并继续。
有什么方法可以做到这一点?
编辑:这是捕获异常的方法:
public int insertRecord(final String sql,final Object[] paramArray, KeyHolder keyHolder) {
Integer retStatus = jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con) {
String[] keyColNames=new String[1];
PreparedStatement ps = null;
try {
ps=con.prepareStatement(sql,keyColNames);
if(paramArray!=null){
int size=paramArray.length;
for(int i=0;i<size;i++){
ps.setObject(i+1, paramArray[i]);
}
}
} catch (CannotGetJdbcConnectionException e) {
logger.debug("caught SQLexception, now what should I do?");
con.reconnectToDatabase(); // this method doesnt exist but is what I need!
}
return ps;
}
}, keyHolder);
return retStatus;
}
答案 0 :(得分:0)
更新:
如果您希望简单地重新连接数据库,则可以为此专门创建一个类,为其创建一个getConnection方法,然后简单地返回重新建立的连接。 例如:
public class ConnectionManager {
private Connection connection;
public String driverURL = "[Your driver URL]";
public Connection getConnection(String user, String password) {
try {
//SQLServerDriver or whichever you are using
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection(driverURL, username, password);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(SQLException e) {
e.printStackTrace();
}
return connection;
}
然后:
con = new ConnectionManager().getConnection(user, pass);
您可以从那里再次调用该方法,然后重试插入或随便处理。