如何在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中的表中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如果在循环中使用 MySQLi 准备好的语句,我啥时候调用 bind_param?