データベース内に 3 つのテーブルがあります。1 つはemployee
、2 番目はemployee_Project
、3 番目はemployee_Reporting
です。各テーブルには共通employee_Number
の主キーがあり、それらの間には 1 対多の関係があり、1 人の従業員が多くのプロジェクトと報告日を持っています。
メソッドとを持つ 3 つのデータ ホルダー クラスで、、、をselect * from employee
実行select * from employee_project
しました。これはメソッドを持つクラスに 基づいており、実装が完了しています。select * from employee_reporting
fillResultSet(Result set)
List<T> getData()
SqlDbEngine
runQuery(PreparedStatement,DataHolder)
getAllEmployee()
ここで、JDBC を使用して Java で最適なコードを使用して、プロジェクトとレポートの詳細と共にメソッドを設計する必要があります。イテレータを使用しましたが、この解決策は受け入れられません。今度は 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);
}
}
}
}
従業員レポートについても同じですが、このパフォーマンスは低下します。接続を閉じる心配はありません。私はそれを行います
どうすれば解決策を改善できるか教えてください..