java - 带有引用多个表的sql查询的preparedstatement

标签 java sql jdbc

所以我试图在网上找到一个关于创建一个有引用多个表的sql查询的preparedStatement的示例。

例如到目前为止我遇到的例子总是

例如

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

其中只涉及一张表,并且该方法存在于数据库表的同一个类中。例如。 User.class ,数据库中的用户表。

我的查询要求我从另一个表/类设置占位符。在本例中,我的方法存在于 User.class 中,但是,它需要来自 Group 对象的绑定(bind)。

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 中调用列表列表(Grupos groups)方法

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;
    }

最佳答案

代码中第一个可以抛出 NPE 的实例位于:

preparedStatement = connection.prepareStatement(SQL_LIST_ALL);

如果您的连接为空,则您的连接工厂没有返回连接,请检查您是否有有效的连接

第二名:

groups.getId_grupo()

检查您的组是否为空

如果这些不是原因,请发布您的堆栈跟踪。

关于java - 带有引用多个表的sql查询的preparedstatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398827/

相关文章:

Java Swing : JPanel will not paint

SQL:如何仅选择任何给定组具有给定所有值的组?

php - 为每个 id 添加元值,其中 post_type = ??文字新闻

sql - 如何创建派生属性?

jdbc - 使用 JDBC 连接到 Hadoop 中的命名队列

java - RowSets 可以与 PreparedStatements 一起使用吗?

java - 有条件地执行 JMeter Maven 插件

java - 从哪里下载 Eclipse WTP

java - 控制幂集中元素的顺序

java - MYSQL数据库很多连接问题