【问题标题】:an exception about SQL select syntax [duplicate]关于 SQL 选择语法的异常 [重复]
【发布时间】: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


【解决方案1】:

PreparedStatementStatement 的子类。 Statement 实现 executeQuery(String) 以执行简单的查询字符串,无需参数替换。

您已经在此处提供了带有参数占位符的查询字符串:

stat = con.prepareStatement(select2);

所以而不是:

rslt = stat.executeQuery(select2);

这样做:

rslt = stat.executeQuery();

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多