java - jdbc性能

标签 java jdbc

我的数据库中有这些表。一是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/

相关文章:

java - 将图像从桌面拖放到 WYSIWYG 编辑器

java - Autowiring 字段仍然为空

java.security.NoSuchAlgorithmException : Provider SunJCE does not provide DES/ECB/NoPadding

java.lang.AbstractMethodError : oracle. jdbc.driver.OraclePreparedStatementWrapper.setBinaryStream

java - 在运行时从 DatabaseMetaData 匹配表名和别名?

java - oracle.jdbc.driver.OracleConnection 的类转换异常

java - 如何从 Java 作为单独的进程运行 groovy?

java - 如何在android中的两个子 Activity 之间传输数据?

sql-server - 从 Google 脚本连接到 MS SQL 数据库

java - 列表到数组并放入 jComboBox