Как выполнить подготовленный оператор в цикле для извлечения данных из таблиц в JSP? - PullRequest
0 голосов
/ 24 августа 2018

что не так в этом коде?Я получаю эту ошибку.

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

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Итак, один большой совет: вы хотите 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);
        }
0 голосов
/ 24 августа 2018

В вашем запросе SQL есть опечатка.Вы дали ОТ ФОРМЫ.Это должно быть

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

Кроме того, поскольку вы используете один и тот же PreparedStatement во всем цикле, тогда лучше держать PreparedStatement вне цикла.Если у вас есть sql statment, который постоянно меняется внутри цикла, то его стоит использовать только в цикле.Если он продолжает меняться, просто используйте Statement вместо PreparedStatement, иначе само значение PreparedStatement будет потеряно при его изменении.

0 голосов
/ 24 августа 2018

Должно быть FROM вместо FORM. Сообщение об ошибке ясно указывает на то, что проблема связана с обязательным ключевым словом FROM.

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