gpt4 book ai didi

java - 为什么连接抛出 timeoutException 而不提交

转载 作者:行者123 更新时间:2023-11-29 23:37:49 26 4
gpt4 key购买 nike

我有一个 DAO 类,它有下面的方法。我在事务管理器中称其为事务管理器。当我在没有“conn.commit()”行的情况下运行它时 - 它会抛出超时异常,但是当我用这个行运行它时 - 就可以了。有什么问题?据我所知,如果不修改数据库就不需要提交?

    @Override
public List<String> getLinks(int id) throws SQLException {
List<String> list = new ArrayList<>();
Connection conn = factory.newConnection();
Statement statement = null;
ResultSet rs = null;
try {
String expression = "select link from users.links where id=" + id + " order by id_link desc";
statement = conn.createStatement();
rs = statement.executeQuery(expression);
while (rs.next()) {
list.add(rs.getString("link"));
}
// !!!!!!!!!!!!! without next line method throw TimeoutException
conn.commit(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return list;
} catch (SQLException e) {
rollBackQuietly(conn);
e.printStackTrace();
} finally {
closeQuaitly(rs);
closeQuaitly(statement);
closeQuaitly(conn);
}
return null;
}

最佳答案

由于 commit() 调用是在引发异常的行之后,因此此问题一定是在重复调用此方法之后出现的(包含在其中的有用信息)你的问题)。这使我相信您的连接工厂正在重复使用连接,并且它正在分发“陈旧”连接(已经放置太长时间且不再可用的连接)。如果这都是真的,那么您需要让您的工厂更好地管理连接。如果它是一个合理构建的连接池,它可能具有一些您需要启用的功能,例如“空闲时测试”或“获取时测试”。

关于java - 为什么连接抛出 timeoutException 而不提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318868/

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