подготовленное заявление с SQL-запросом, ссылающимся на несколько таблиц - PullRequest
0 голосов
/ 06 декабря 2011

Поэтому я пытаюсь найти в Интернете пример создания подготовленного состояния, в котором есть SQL-запрос, ссылающийся на несколько таблиц.

Например, примеры, с которыми я сталкивался до сих пор, всегда

, например:

s = conn.prepareStatement ("DELETE FROM Users WHERE id_user = ?");
s.setInt (1, 2);

, где задействована только одна таблица, и метод существует в том же классе таблицы базы данных.Например, User.class, пользовательская таблица в базе данных.

Мой запрос требует от меня установки заполнителя из другой таблицы / класса.В этом случае мой метод существует в классе User.class, однако он требует привязки от объекта Group.

SELECT DISTINCT *
FROM usuarios 
WHERE NOT EXISTS
(SELECT * FROM usuarios_grupos 
 WHERE usuarios_grupos.id_grupo = ? 
 AND usuarios_grupos.id_usuario = usuarios.id_usuario);

Будет ли метод следующим:

public List<Usuarious> list(Grupos groups) throws DAOExceptions {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<Usuarious> users = new ArrayList<Usuarious>();

        try {
            connection = daoFactory.getConnection();
            preparedStatement = connection.prepareStatement(SQL_LIST_ALL);
            preparedStatement.setInt(1, groups.getId_grupo());
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                users.add(mapUser(resultSet));
            }
        } catch (SQLException e) {
            throw new DAOExceptions(e);
        } finally {
            close(connection, preparedStatement, resultSet);
        }

        return users;
    }

или будет написано по другому ??потому что я, кажется, получаю NPE с этим, и из примеров, которые я видел онлайн.Запрос всегда ссылается на 1 таблицу.Что я делаю здесь неправильно?

хорошо, вот мой метод groups.getId_grupo (), который существует в моем Group.class:

public class Grupos {

Integer id_grupo;
String descricao;

public Grupos() {

}

public Grupos(Integer id_grupo, String descricao) {
    this.id_grupo = id_grupo;
    this.descricao = descricao;
}

public Grupos(Integer id_grupo) {
    this.id_grupo = id_grupo;
}


public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public Integer getId_grupo() {
    return id_grupo;
}

public void setId_grupo(Integer id_grupo) {
    this.id_grupo = id_grupo;
}

}

Я вызываю мой метод списка списков (групп групп) в моем ManagedBean

public class UsuariousGruposBean implements Serializable {

private Usuarious user = new Usuarious();
private Grupos grps = new Grupos();
private UsuariousGrupos userGroups = new UsuariousGrupos();

protected final UsuariousDAO userDAO = daoFactory.getUserDAO();
protected final GruposDAO grpDAO = daoFactory.getGruposDAO();
protected final UsuariousGruposDAO userGrpDAO = daoFactory.getUsuariousGruposDAO();

    private List<Usuarious> listOfUsuarios;
    private List<Grupos> listOfGrps;
    private List<UsuariousGrupos> listOfUserGroups;

public UsuariousGruposBean() {
    }

    public List<Usuarious> getListOfUsuarios() throws DAOExceptions {
        List<Usuarious> usuariosList = userDAO.list(grps);
        listOfUsuarios = usuariosList;
        return listOfUsuarios;
    }

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

Первый экземпляр в вашем коде может выдать NPE по адресу:

preparedStatement = connection.prepareStatement(SQL_LIST_ALL);

Если ваше соединение пустое, ваша фабрика соединений не вернула вам его, проверьте, есть ли у вас действительное соединение

Второе место:

groups.getId_grupo()

Проверьте, являются ли ваши группы пустыми или нет

Если это не так, пожалуйста, опубликуйте свою трассировку стека.

0 голосов
/ 06 декабря 2011

Трассировка стека вашего NPE должна помочь вам определить причину проблемы (строка # и т. Д.). Насколько я могу судить, ваш SQL и способ его вызова верны.

Возможно ли, что вы получаете нулевой параметр groups, такой, что вызов groups.getId_grupo() вызывает NPE?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...