我的数据库中有这些表。一是employee
,第二个是employee_Project
,第三个是 employee_Reporting
。每个表都有一个共同的employee_Number
作为其主键,并且它们之间存在一对多的关系,使得一名员工有多个项目和报告日期。
我已经运行了select * from employee
, select * from employee_project
, select * from employee_reporting
在具有方法 fillResultSet(Result set)
的三个数据持有者类中和List<T> getData()
。这是基于SqlDbEngine
类 runQuery(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/