带preparedStatement的java sql Select*
我今天用select SQL遇到了这个问题。这种方法应该以tex-tfields的形式显示数据库中的数据。我把它从一份声明改为一份准备好的声明,但我遇到了一个问题
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”
# 1 楼答案
您没有填充
Enterprise
对象。而且您没有正确使用executeQuery()
函数。如下图所示,括号内的参数已被删除PreparedStatement
首先需要参数的值(查询中的?
),然后必须执行形成的查询。如果给String
一个executeQuery()
参数,那么括号中的查询将被执行下面可以看到
Enterprise
被填充的部分这将是正确的方式:
# 2 楼答案
对
executeQuery()
的调用应该而不是传递查询字符串。使用此版本:您当前的代码实际上正在调用某个重载的
Statement#executeQuery()
方法,该方法不是您要调用的方法的版本# 3 楼答案
你调用了错误的方法。与语句不同,在使用PrePrePreedStatement时,应该首先设置参数的值,然后可以调用该实例的executeQuery()方法。 另外,最好使用try with resources,因为语句或PreparedStatement对象是资源(资源是实现自动关闭接口的类),您必须关闭它。使用try with resources,它会自动完成。 ResultSet实例也是一个资源,但是当语句对象关闭时,它是关闭的,所以您不必显式地关闭它。 因此,解决问题的最佳方法是: