public List<ReportEntry> getReport(Long from, Long to) {

        if (from == null) {
            throw new IllegalArgumentException("report start date cannot be null");
        }

        if (to == null) {
            throw new IllegalArgumentException("report end date cannot be null");
        }

        if (to < from) {
            throw new IllegalArgumentException("Report end date must be after start date");
        }

        ResultSet results = null;
        try {

            if (preparedStatement == null) {
                preparedStatement = connection.prepareStatement(REPORT_QUERY);
            }

            connection.setAutoCommit(false);

            preparedStatement.setLong(1, from);
            preparedStatement.setLong(2, to);

            results = preparedStatement.executeQuery();
            long t1 = System.currentTimeMillis();
            List<ReportEntry> reportEntries = new LinkedList<ReportEntry>();
            while (results.next()) {
                ReportEntry reportEntry = new ReportEntry();
                reportEntry.setEmployeeId(results.getLong(1));
                reportEntry.setWorkingHours(results.getDouble(2));
                reportEntries.add(reportEntry);
            }

            long t2 = System.currentTimeMillis();
            long diff = t2 - t1;
            System.out.println("diff = " + diff);
            return reportEntries;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                if (results != null) {
                    results.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }

        }
    }