首页 > 解决方案 > Select * From java with prepareStatement

问题描述

我今天用我的选择 SQL 遇到了这个问题。此方法应该在 tex tfields 中显示数据库中的数据。我将它从语句更改为preparedStatement,但我遇到了一个问题。

 public Entreprise loadDataModify(String id) { 
    Entreprise e = new Entreprise();
    PreparedStatement stmt;

    try {
        String sql = "SELECT * FROM user WHERE mail=?";
        stmt = cnx.prepareStatement(sql);
        stmt.setString(1, id);
        

        ResultSet rst = stmt.executeQuery(sql);
        while (rst.next()) {
            stmt.setString(2, e.getNom());
            stmt.setString(3, e.getEmail());
            stmt.setString(4, e.getTel());
            stmt.setString(5, e.getOffre());

        }

    } catch (SQLException ex) {
        System.out.println(ex.getMessage());

    }
    return e;

}

它表明我有语法问题,输出是“nu

标签: javasqljdbcprepared-statement

解决方案


你调用了错误的方法。与 Statement 不同,当您使用 PreperedStatement 时,您应该首先设置参数的值,然后可以调用该实例的 executeQuery() 方法。此外,最好使用try-with-resources,因为 Statement 或 PreparedStament 对象是一个Resource(资源是一个实现AutoCloseable接口的类),您必须关闭它。使用 try-with-resources,它会自动完成。ResultSet 实例也是一个资源,但是当语句对象关闭时它就关闭了,因此您不必显式关闭它。因此,解决您的问题的最佳方法是:

 String selectAllByMail = "SELECT * FROM user WHERE mail=?";
    try (PreparedStatement prpStatement = connection.prepareStatement(selectAllByMail)) {
        // use prpStatement
        prpStatement.setString(1, id);
        ResultSet resultSet = prpStatement.executeQuery();
        while (resultSet.next()) {
            // process resultSet

        }
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }

推荐阅读