Необходима помощь вот каком вопросе. Написал запросы к БД, на что было получено замечание, что "использование ps неэффективно". Объясните, пожалуйста, в чем ошибка.
public class UserDatabaseDao implements UserDao {
private final Connection con;
public UserDatabaseDao(Connection con) {
this.con = con;
}
private User getUser(ResultSet rs) throws SQLException {
User result = new User();
result.setId(rs.getInt("id"));
result.setNickname(rs.getString("nickname"));
result.setFirstName(rs.getString("firstName"));
result.setSecondName(rs.getString("secondName"));
result.setPassword(rs.getString("password"));
result.setEmail(rs.getString("email"));
return result;
}
public User getById(int id) {
User result = null;
try {
PreparedStatement ps = con.prepareStatement("SELECT * FROM user WHERE id=?");
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
result = getUser(rs);
}
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
public void update(User user) {
try {
PreparedStatement ps = con.prepareStatement("UPDATE user SET nickname=?, firstName=?, secondName=?, WHERE id=?");
ps.setInt(4, user.getId());
} catch (SQLException e) {
e.printStackTrace();
}
}
public void add(User user) {
PreparedStatement ps;
try {
ps = con.prepareStatement("INSERT INTO user (nickname, firstName, secondName, password, email)" +
" VALUES (?,?,?,?,?)");
ps.setString(1, user.getNickname());
ps.setString(2, user.getFirstName());
ps.setString(3, user.getSecondName());
ps.setString(4, user.getPassword());
ps.setString(5, user.getEmail());
ps.executeUpdate();
ps.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(int id) {
try {
PreparedStatement ps = con.prepareStatement("DELETE FROM user WHERE id=?");
ps.setInt(1, id);
ps.executeUpdate();
}
catch (SQLException e) {
e.printStackTrace();
}
} }
public class UserDatabaseDao implements UserDao {
private final Connection con;
private PreparedStatement getByIdStmt;
private PreparedStatement updateStmt;
......
public UserDatabaseDao(Connection con) {
this.con = con;
updateStmt = con.prepareStatement("UPDATE user SET nickname=?, firstName=?, secondName=?, WHERE id=?");
getByIdStmt = con.prepareStatement("SELECT * FROM user WHERE id=?");
.......
}
И т.д.
Сама идея подготовленных запросов в том и состоит, что вы их один раз подготавливаете, а потом переиспользуете с разными параметрами столько раз, сколько вам нужно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть задача - создать веб-приложение по типу CRM (база данный клиентов и работа с ней) с возможностью подсоединения его к api разных сервисов,...