如何在 for 循环中执行准备语句以从 jsp 中的表中获取数据?

how to execute prepared statement in a for loop to fetch data from tables in jsp?

这段代码有什么问题?我收到此错误。

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'attendance where sub_id='3' and reg_no='1111'' at line 1

代码

try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection con =
            DriverManager.getConnection("jdbc:mysql://localhost:3306/sms", "root", "*****");

    int k;
    String sub = "";
    int t_class[] = new int[counter];
    int att_class[] = new int[counter];
    int tallo_class[] = new int[counter];

    PreparedStatement ps3;
    PreparedStatement ps4;
    PreparedStatement ps5;

    for (k = 0; k < (counter - 1); k++) {

        sub = subjects_id[k];

        //START : getting total no of classes held 
        ps3 = con.prepareStatement("SELECT COUNT(*) FORM attendance where sub_id=? and reg_no=?");

        ps3.setString(1, sub);
        ps3.setString(2, reg_no);

        ResultSet rs3 = ps3.executeQuery();

        rs3.next();
        t_class[k] = rs3.getInt(1);
    }
}

应该是FROM而不是FORM。错误消息清楚地表明问题出在必需的 FROM 关键字之后。

ps3 = con.prepareStatement("SELECT COUNT(*) FROM attendance where sub_id=? and reg_no=?");

所以一个重要的提示是你想 prepare 你的语句在循环之外。这就是准备它的一点(同时,参数化输入)。您可以重新使用该语句,然后如上所述您拼错了单词 FROM

PreparedStatement statement = con.prepareStatement("SELECT COUNT(*) FROM attendance where sub_id=? and reg_no=?");
        for (int i = 0; i < (k - 1); i++) {
            statement.setString(1, sub);
            statement.setString(2, reg_no);
            ResultSet rs3 = ps3.executeQuery();
            rs3.next();
            t_class[k] = rs3.getInt(1);
        }

您的 SQL 查询中有错字。您已将 FROM 作为 FORM。应该是

ps3 = con.prepareStatement("SELECT COUNT(*) FROM attendance where sub_id=? and reg_no=?");

此外,由于您在整个循环中使用相同的 PreparedStatement,因此最好将 PreparedStatement 保留在循环之外。如果你有 sql 声明在循环内不断变化,那么只有在循环中使用它才值得。如果它不断变化,那么只需使用 Statement 而不是 PreparedStatement,否则 PreparedStatement 的真正目的会随着您不断变化而丢失。