gpt4 book ai didi

java - jdbc性能

转载 作者:行者123 更新时间:2023-12-02 07:30:02 28 4
gpt4 key购买 nike

我的数据库中有这些表。一是employee ,第二个是employee_Project ,第三个是 employee_Reporting 。每个表都有一个共同的employee_Number作为其主键,并且它们之间存在一对多的关系,使得一名员工有多个项目和报告日期。

我已经运行了select * from employee , select * from employee_project , select * from employee_reporting在具有方法 fillResultSet(Result set) 的三个数据持有者类中和List<T> getData() 。这是基于SqlDbEnginerunQuery(PreparedStatement,DataHolder)方法,已经实现完毕。

现在我必须设计一个getAllEmployee()方法以及项目和报告详细信息以及使用 JDBC 的 Java 中的最佳代码。我使用了迭代器,但这个解决方案是 Not Acceptable ;现在我必须使用 foreach 循环。

这就是我所做的:

public List<Employee> getAllEmployees() {
EmployeeDataHolderImpl empdataholder = new EmployeeDataHolderImpl();
List<Employee> list_Employee_Add = null;

try {
Connection connection = mySqlDbConnection.getConnection();
PreparedStatement preparedStatement = connection
.prepareStatement(GET_ALL_EMPLOYEE_DETAILS);
mySqlDBEngineImpl.runQuery(preparedStatement, empdataholder);
} catch (SQLException e) {

e.printStackTrace();
}
for (Employee employee : empdataholder.getData()) {
new EmployeeDAOImpl().getProject(employee);
new EmployeeDAOImpl.getReport(employee);
}
list_Employee_Add = empdataholder.getData();
return list_Employee_Add;

}

并创建另一种方法

    public void getProject(Employee emp) {
EmployeeProjectDataHolderImpl employeeProjectHolder = new EmployeeProjectDataHolderImpl();
try {
Connection connection = mySqlDbConnection.getConnection();
PreparedStatement preparedStatement = connection
.prepareStatement(GET_ALL_PROJECT_DETAILS);
mySqlDBEngineImpl
.runQuery(preparedStatement, employeeProjectHolder);
} catch (SQLException e) {
e.printStackTrace();
}
for (EmployeeProject employee_Project : employeeProjectHolder.getData()) {
if (employee_Project.getEmployeeNumber() == emp.getEmpNumber()) {
emp.getProjects().add(employee_Project);
}
}
}

public void getReport(Employee emp) {
EmployeeReportDataHolderImpl employeeReportHolder = new EmployeeReportDataHolderImpl();
try {
Connection connection = mySqlDbConnection.getConnection();
PreparedStatement preparedStatement = connection
.prepareStatement(GET_ALL_REPORT_DETAILS);
mySqlDBEngineImpl
.runQuery(preparedStatement, employeeReportHolder);
} catch (SQLException e) {
e.printStackTrace();
}
for (EmployeeReport employee_Report : employeeReportHolder.getData()) {
if (employee_Report.getEmployeeNumber() == emp.getEmpNumber()) {
emp.getProjects().add(employee_Project);
}
}
}
}

对于员工报告也是如此,但是这样做,性能将会下降。没有人担心关闭连接,我会这样做

请告诉我如何改进我的解决方案..

最佳答案

您的代码存在一些问题。

1.您每次都在初始化 EmployeeDAOImpl,而您可以只保留一个实例并调用它的操作。

new EmployeeDAOImpl().getProject(employee); new EmployeeDAOImpl.getReport(employee);

2.我没有看到执行 SQL 操作后在哪里关闭连接。

关于java - jdbc性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025495/

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