gpt4 book ai didi

java - 如何在 try-catch block 内重新连接到数据库?

转载 作者:行者123 更新时间:2023-12-02 03:11:34 25 4
gpt4 key购买 nike

我有一个 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 block 并继续。

有什么方法可以实现这一点?

编辑:这是捕获异常的方法:

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;
}

最佳答案

更新:

如果您希望简单地重新连接数据库,您可以专门为此创建一个类,为其创建一个 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);

从那里您可以再次调用该方法并重试插入或按照您的意愿进行操作。

关于java - 如何在 try-catch block 内重新连接到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56991396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com