Выборка всех элементов методом getAll() работает, а выборка методом get() нет. Даже напрямую указываю строку, толку нет.
@Repository
public class UserDao {
//todo 2) изменить подключение к базе через HikariCP к PostgreSQL
public static void main(String[] args) {
try {
UserDao userDao = new UserDao();
List<User> users = userDao.getAll();
for (User model : users) {
System.out.println(model.toString());
}
} catch (SQLException e) {
System.err.println("ошибка");
e.printStackTrace();
}
}
private Connection connect() {
Connection connection = null;
Properties properties = new Properties();
properties.setProperty("user", username);
properties.setProperty("password", pass);
properties.setProperty("ssl", ssl);
properties.setProperty("sslfactory", sslfactory);
try {
connection = DriverManager.getConnection(url,properties);
System.out.println("connect postgreSQL server successful!!!");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return connection;
}
public void save(User user) throws SQLException {
PreparedStatement preparedStatement = null;
try {
preparedStatement = connect().prepareStatement("insert into users (login, firstname, lastname, email, password) values (?, ?, ?, ?, ?)");
preparedStatement.setString(1, user.getLogin());
preparedStatement.setString(2, user.getFirstName());
preparedStatement.setString(3, user.getLastName());
preparedStatement.setString(4, user.getEMail());
preparedStatement.setString(5, user.getPassword());
preparedStatement.execute();
System.out.println("Новый пользователь добавлен в БД");
}catch (SQLException ex) {
ex.printStackTrace();
System.err.println("Ошибка при сохранении!");
}finally {
preparedStatement.close();
}
}
public User get(String login) throws SQLException {
Statement statement = connect().createStatement();
ResultSet resultSet = null;
User user = new User();
try {
resultSet = statement.executeQuery("select * from users");
user.setLogin(resultSet.getString(2));
user.setFirstName(resultSet.getString(3));
user.setLastName(resultSet.getString(4));
user.setEMail(resultSet.getString(5));
user.setPassword(resultSet.getString(6));
} catch (SQLException ex) {
System.err.println("ошибка");
ex.printStackTrace();
ex.getErrorCode();
ex.getMessage();
} finally {
if (resultSet != null)
resultSet.close();
else {
System.err.println("Ошибка чтения данных с БД!");
}
return user;
}
}
public List<User> getAll() throws SQLException{
Statement statement = connect().createStatement();
ResultSet resultSet = null;
List<User> users = new ArrayList();
try {
resultSet = statement.executeQuery("select * from users");
while (resultSet.next()) {
User user = new User();
user.setLogin(resultSet.getString(2));
user.setFirstName(resultSet.getString(3));
user.setLastName(resultSet.getString(4));
user.setEMail(resultSet.getString(5));
user.setPassword(resultSet.getString(6));
users.add(user);
}
} catch (SQLException ex) {
ex.getErrorCode();
}
finally {
if (resultSet != null)
resultSet.close();
else {
System.err.println("Ошибка чтения данных с БД!");
}
}
return users;
}
public void remove(String login) {
}
}
ResultSet resultSet = statement.executeQuery("select * from users");
if (resultSet.next()) {
user.setLogin(resultSet.getString(2));
user.setFirstName(resultSet.getString(3));
user.setLastName(resultSet.getString(4));
user.setEMail(resultSet.getString(5));
user.setPassword(resultSet.getString(6));
}
Дело в том, что когда выполняется запрос, указатель ставится до result set'а. Далее его нужно передвигать и проверять имеются ли записи.
Например:
ResultSet rs = stmt.executeQuery("select * from animals");
Сборка персонального компьютера от Artline: умный выбор для современных пользователей