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

Posted

技术标签:

【中文标题】如何在for循环中执行准备好的语句以从jsp中的表中获取数据?【英文标题】:how to execute prepared statement in a for loop to fetch data from tables in jsp? 【发布时间】:2018-08-24 18:36:02 【问题描述】:

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

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);
    

【问题讨论】:

应该是“SELECT COUNT(*) FROM”...(不是 FORM)? 【参考方案1】:

所以一个重要的提示是你想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);
        

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

非常感谢...我担心逻辑问题,我犯了一个简单的语法错误

以上是关于如何在for循环中执行准备好的语句以从jsp中的表中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

在嵌套循环中使用准备好的语句时的最佳方式

如何使用多个 for 循环在 php 中创建 sql 语句

如果在循环中使用 MySQLi 准备好的语句,我啥时候调用 bind_param?

Spring JPA - 准备好的语句查询?

php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]

如何理解Golang中的range语句