我只能连接到数据库一次



我开始用postgres学习java数据库。我创建了数据库,现在需要在那里添加一些数据。我只能成功添加一次数据,然后我获得了SQLException并且无法向数据库添加任何内容,因此我需要再次启动我的项目。我哪里做错了? 这是添加的方法:(如果还不够,我可以添加需要的内容(

public final Connection CONNECTION = DriverManager.getConnection
(url, login, pass);
public void sqlAddData(Algorithm codec, String input, String translated) throws SQLException {
try (CONNECTION) {
java.sql.Timestamp date = new java.sql.Timestamp(new java.util.Date().getTime());
String add = " insert into db.public.history ( codec, input, translated, date)  values(?,?,?,?)";
PreparedStatement prepared = CONNECTION.prepareStatement(add);
prepared.setString(1, String.valueOf(codec));
prepared.setString(2, input);
prepared.setString(3, translated);
prepared.setTimestamp(4, date);
prepared.executeUpdate();
} catch (SQLException e) {
logger.warning("Error with database");
}
CONNECTION.close();
}

感谢您的帮助,对不起,如果是菜鸟问题,我只是在学习。

这是因为您在一次调用后关闭了连接。

CONNECTION.close((; 是您做的最后一件事,它会关闭连接,如果您想再次添加数据,则需要再次打开连接,或者在不想添加更多内容时等待关闭。

在代码中,您可以使用以下命令在方法之前实例化连接:

public final Connection CONNECTION = DriverManager.getConnection(url, login, pass);

这意味着,如果您在方法关闭它,您将无法重用此连接,除非您创建一个新连接(实例化一个新连接(。

要解决您的问题,您可以执行以下操作:

public final Connection CONNECTION;
public void sqlAddData(Algorithm codec, String input, String translated) throws SQLException {
CONNECTION = DriverManager.getConnection(url, login, pass);
try (CONNECTION) {
java.sql.Timestamp date = new java.sql.Timestamp(new java.util.Date().getTime());
String add = " insert into db.public.history ( codec, input, translated, date)  values(?,?,?,?)";
PreparedStatement prepared = CONNECTION.prepareStatement(add);
prepared.setString(1, String.valueOf(codec));
prepared.setString(2, input);
prepared.setString(3, translated);
prepared.setTimestamp(4, date);
prepared.executeUpdate();
} catch (SQLException e) {
// Handle your exception correctly or throw it.
}
}

请注意,您还可以使用try-catch-finally安全地关闭连接。我没有告诉你如何捕捉你的异常,我会让你自己做一些挖掘;)

另请注意,您正在使用try-with-resources,它可以删除最终块并仍然安全地关闭连接。

希望这有帮助。

只能连接到数据库一次的原因是,通过将 Connection 对象包装在 try-with-resources 语句中来关闭打开的连接。此外,您在该语句之后调用关闭连接,这是多余的。

此问题的解决方案是使用连接池。一些不错的选择是 Hikari 和 C3P0。

最新更新