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

Java 如何在for循环中执行prepared语句以从jsp中的表中获取数据?,java,mysql,jsp,jdbc,prepared-statement,Java,Mysql,Jsp,Jdbc,Prepared Statement,这个代码有什么问题?我得到了这个错误 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 代码 试

这个代码有什么问题?我得到了这个错误

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
代码

试试看{
Class.forName(“com.mysql.jdbc.Driver”);
连接con=
getConnection(“jdbc:mysql://localhost:3306/sms“,”根“,”****”;
int k;
字符串sub=“”;
int t_class[]=新int[计数器];
int att_class[]=新的int[计数器];
int tallo_类[]=新int[计数器];
编制ps3报表;
编制报表ps4;
编制报表ps5;
对于(k=0;k<(计数器-1);k++){
sub=受试者_id[k];
//开始:获取持有的课程总数
ps3=con.prepareStatement(“选择计数(*)表出勤,其中子项id=?和注册号=?”;
ps3.固定管柱(1,分接头);
ps3.设置管柱(2,注册号);
ResultSet rs3=ps3.executeQuery();
rs3.next();
t_class[k]=rs3.getInt(1);
}
}

它应该是来自的
,而不是
表单
。错误消息清楚地表明问题出现在所需的
FROM
关键字之后

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

它应该是来自
,而不是
表单
。错误消息清楚地表明问题出现在所需的
FROM
关键字之后

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

因此,一个重要提示是,您希望
在循环之外准备您的语句。这就是准备它的要点(也就是参数化输入)。您可以重复使用该语句,然后如上所述,您将
中的单词拼写错误

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);
        }
PreparedStatement=con.prepareStatement(“从出席人数中选择计数(*),其中sub_id=?和reg_no=?”;
对于(int i=0;i<(k-1);i++){
报表.设置字符串(1,子项);
声明.设置管柱(2,注册号);
ResultSet rs3=ps3.executeQuery();
rs3.next();
t_class[k]=rs3.getInt(1);
}

因此,一个大技巧是,你想在循环之外准备你的陈述。这就是准备它的要点(也就是参数化输入)。您可以重复使用该语句,然后如上所述,您将
中的单词拼写错误

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);
        }
PreparedStatement=con.prepareStatement(“从出席人数中选择计数(*),其中sub_id=?和reg_no=?”;
对于(int i=0;i<(k-1);i++){
报表.设置字符串(1,子项);
声明.设置管柱(2,注册号);
ResultSet rs3=ps3.executeQuery();
rs3.next();
t_class[k]=rs3.getInt(1);
}

您的SQL查询中有一个输入错误。你已经以表格的形式给出了答案。应该是

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

另外,由于在整个循环中使用相同的
PreparedStatement
,因此最好将
PreparedStatement
保留在循环之外。如果您的sql语句在循环中不断变化,那么只有在循环中使用它才有价值。如果它一直在更改,那么只需使用
语句
而不是
PreparedStatement
,否则当您不断更改它时,
PreparedStatement
的目的就失去了。

您的SQL查询中有一个输入错误。你已经以表格的形式给出了答案。应该是

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

另外,由于在整个循环中使用相同的
PreparedStatement
,因此最好将
PreparedStatement
保留在循环之外。如果您的sql语句在循环中不断变化,那么只有在循环中使用它才有价值。如果它一直在变化,那么只需使用
语句
而不是
PreparedStatement
,否则
PreparedStatement
的真正目的在不断变化时就失去了。

谢谢大家。。。我很担心逻辑,我犯了一个简单的语法错误谢谢很多人。。。我担心逻辑,我犯了一个简单的语法错误,应该是“选择计数(*)从”。。。(不是表格)?应该是“选择计数(*)从”。。。(不是表格)?