Select * 来自 java with preparedStatement
Select * From java with preparedStatement
今天我的 select SQL 遇到了这个问题。此方法应该在文本字段中显示来自数据库的数据。我把它从 statement 改为 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
您对 executeQuery()
的调用应该 而不是 传递查询字符串。使用此版本:
String sql = "SELECT * FROM user WHERE mail=?";
stmt = cnx.prepareStatement(sql);
stmt.setString(1, id);
ResultSet rst = stmt.executeQuery();
while (rst.next()) {
// process result set
}
您当前的代码实际上是在调用一些重载的 Statement#executeQuery()
方法,这不是您要调用的方法的版本。
您没有填充 Enterprise
对象。而且您没有正确使用 executeQuery()
功能。如下所示,括号内的参数已被删除。 PreparedStatement
s 首先需要参数值(查询中的 ?
),然后必须执行形成的查询。如果给 executeQuery()
一个 String
参数,那么将执行括号中的查询。
Enterprise
填充的部分如下图
正确的方法是:
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();
while (rst.next())
{
// rst keeps the data, so you have to traverse it and get the data from it in this way.
e.setNom( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
e.setEmail( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
e.setTel( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
e.setOffre( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return e;
}
您调用了错误的方法。与 Statement 不同,当您使用 PreperedStatement 时,您应该首先设置参数的值,然后您可以调用该实例的 executeQuery() 方法。
此外,最好使用 try-with-resources,因为 Statement 或 PreparedStament 对象是 Resource(资源是 class 实现了 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();
}
今天我的 select SQL 遇到了这个问题。此方法应该在文本字段中显示来自数据库的数据。我把它从 statement 改为 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
您对 executeQuery()
的调用应该 而不是 传递查询字符串。使用此版本:
String sql = "SELECT * FROM user WHERE mail=?";
stmt = cnx.prepareStatement(sql);
stmt.setString(1, id);
ResultSet rst = stmt.executeQuery();
while (rst.next()) {
// process result set
}
您当前的代码实际上是在调用一些重载的 Statement#executeQuery()
方法,这不是您要调用的方法的版本。
您没有填充 Enterprise
对象。而且您没有正确使用 executeQuery()
功能。如下所示,括号内的参数已被删除。 PreparedStatement
s 首先需要参数值(查询中的 ?
),然后必须执行形成的查询。如果给 executeQuery()
一个 String
参数,那么将执行括号中的查询。
Enterprise
填充的部分如下图
正确的方法是:
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();
while (rst.next())
{
// rst keeps the data, so you have to traverse it and get the data from it in this way.
e.setNom( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
e.setEmail( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
e.setTel( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
e.setOffre( rst.getString("HERE EITHER THE COLUMN NAME OR INDEX"));
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return e;
}
您调用了错误的方法。与 Statement 不同,当您使用 PreperedStatement 时,您应该首先设置参数的值,然后您可以调用该实例的 executeQuery() 方法。 此外,最好使用 try-with-resources,因为 Statement 或 PreparedStament 对象是 Resource(资源是 class 实现了 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();
}