【问题标题】:how to execute prepared statement in a for loop to fetch data from tables in jsp?如何在for循环中执行准备好的语句以从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)?

标签: java mysql jsp jdbc prepared-statement


【解决方案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=?");
      

      【讨论】:

      • 非常感谢...我担心逻辑问题,我犯了一个简单的语法错误
      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2012-07-07
      • 2020-03-15
      相关资源
      最近更新 更多