【发布时间】:2021-04-27 22:30:38
【问题描述】:
关闭preparedStatement是否也会关闭并将连接返回到连接池?
public void insertProjectIntoDatabase(Project project) {
String insertProjectIntoDatabase =
"INSERT INTO projects(Project_Id, Project_Name, Project_StartDate, Deadline) " +
"VALUES (?, ?, ?, ?)";
try {
preparedStatement = DBCPDataSource.getConnection().prepareStatement(insertProjectIntoDatabase);
preparedStatement.setInt(1, project.getProjectId());
preparedStatement.setString(2, project.getName());
preparedStatement.setDate(3, java.sql.Date.valueOf(project.getStartDate()));
preparedStatement.setDate(4, java.sql.Date.valueOf(project.getDeadline()));
preparedStatement.execute();
preparedStatement.close();
}
catch (SQLException e)
{
System.out.println("Error happened in ProjectRepository at insertProjectIntoDatabase(): " + e.getMessage());
}
}
额外问题:
我已经创建了性能测试,用于在每次对象需要一个新连接时创建一个新连接、单例连接和连接池。
单例 - 最快
每次都创建一个新连接 - 比上面的慢(1.2s)
连接池 - 最慢(第一次连接 - 比上一个慢 2-3 秒,以下测试比上一个慢 0.4 秒)
我正在使用 Apache Commons DBCP 作为连接池。
我认为使用连接池会比单例连接慢一点。
我做错了吗?
【问题讨论】:
-
可能你应该保存连接并在完成后关闭()stackoverflow.com/questions/28209955/…
-
您可能证明启动一个连接池需要更长的时间来打开一个单个连接,这是正确的。
-
每个问题只问一个问题。