Есть три метода, которые отличаются буквально в пару строчек. Можно как-то избежать дублирования кода?
@Override
public List<Employee> findAll() {
List<Employee> list = new ArrayList<>();
Connection connection = null;
try {
connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_FIND_ALL);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
Employee tempEmployee = convertRowToEmployee(rs);
list.add(tempEmployee);
}
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
dataSource.closeConnection(connection);
}
return list;
}
@Override
public List<Employee> findByName(String name) {
List<Employee> list = new ArrayList<>();
Connection connection = null;
try {
connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_FIND_BY_NAME);
statement.setString(1, name);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
Employee tempEmployee = convertRowToEmployee(rs);
list.add(tempEmployee);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
dataSource.closeConnection(connection);
}
return list;
}
@Override
public List<Employee> findAllAbsenceEmployeeByDate(Date startDate, Date endDate) {
List<Employee> list = new ArrayList<>();
Connection connection = null;
try {
connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_FIND_ALL_ABSENCE_BY_DATE);
statement.setDate(1, startDate);
statement.setDate(2, endDate);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
Employee tempEmployee = convertRowToEmployee(rs);
list.add(tempEmployee);
}
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
dataSource.closeConnection(connection);
}
return list;
}
Преобразование строк в объект вынес в отдельный метод convertRowToEmployee(rs), соединение и закрытие вынес в отдельный класс DataSource
Оптимизировать лучше не надо, так как потом в случае расширения (добавления новых фич) Вам придется заново все по полной программе тестировать плюс потеряете в читабельности кода. Также у Вас в коде присутствует ошибка. Необходимо закрывать PreparedStatement и ResultSet. Рекомендую метод закрытия этих объектов также реализовать в DataSource как то так:
public void close(){
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void close(PreparedStatement ps){
if (ps != null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void close(CallableStatement cs){
if (cs != null){
try {
cs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void close(PreparedStatement ps, ResultSet rs){
close(ps);
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void close(CallableStatement cs, ResultSet rs){
close(cs);
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть ли в природе готовый плагин jquery для перетаскивания ячеек html ? чтоб в дальнейшем их можно было сохранить в базу новые значения позиций