【发布时间】:2021-12-27 20:11:49
【问题描述】:
我准备了一种方法,将一个名为“etudiants”的表的内容打印到另一个表“filieres”中,我的代码是:
public ArrayList<Etudiant> afficher() {
ArrayList list = new ArrayList<Etudiant>();
con = Connexion.getCon();
String select = "SELECT * FROM etudiants";
try {
st = con.prepareStatement(select);;
rs = st.executeQuery();
String select2 = "";
PreparedStatement stat = null;
ResultSet rslt = null ;
while (rs.next()) {
Etudiant etu = new Etudiant();
etu.setIdE(rs.getInt("id"));
etu.setNomE(rs.getString("nom"));
etu.setPrenomE(rs.getString("prenom"));
etu.setDateNE(rs.getDate("date_naissance"));
etu.setSexeE(rs.getString("sexe"));
etu.setNiveauE(rs.getInt("niveau"));
select2 = "select nom from filieres where id=?";
//on prepare une autre statment pour selectionner de la table filieres le nom
//correspondant à l'id selectionné dans le table etudiants
stat = con.prepareStatement(select2);
stat.setInt(1, rs.getInt("filiere"));
rslt = stat.executeQuery(select2);
etu.setNomFiliereE(rslt.getString("nom"));
list.add(etu);
}
} catch (SQLException ex) {
Logger.getLogger(GestionEtudiant.class.getName()).log(Level.SEVERE, null, ex);
}
return list;
}
似乎 SQL 语句是正确的,但是它给了我这个错误:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?' at line 1
【问题讨论】:
-
rslt = stat.executeQuery(select2);必须是rslt = stat.executeQuery();,因为它是一个准备好的语句。如果您提供带有“?”的查询字符串语法,它可能会尝试在没有参数替换的情况下将其作为简单查询执行。executeQuery(String)是在超类中实现的,就是一个简单的Statement。 -
您已经在此处提供了查询字符串:
stat = con.prepareStatement(select2);
标签: java sql database sqlexception