stmt.executeUpdate上的java servlet出错
这是我的代码:stmt.executeUpdate上的java servlet出错,java,jdbc,compiler-errors,Java,Jdbc,Compiler Errors,这是我的代码: String[] teams = {"Blue Team", "Red Team", "Yellow Team", "Green Team", "Orange Team"}; int count = 0, team = 0; String selectSQL = "select * from students";
String[] teams = {"Blue Team", "Red Team", "Yellow Team", "Green Team", "Orange Team"};
int count = 0, team = 0;
String selectSQL = "select * from students"; // rand and distinct
Statement stmt = conn.createStatement();
ResultSet rs1 = stmt.executeQuery(selectSQL);
// Retrieve the results
while(rs1.next()){
if(count==3){
team++;
count = 0;
}
stmt.executeUpdate("Insert into "teams[team]" values ('"+rs1.getString("studentno")+"', '"+rs1.getString("firstname")+"', '"+rs1.getString("surname")+"', '"+rs1.getString("degreecode")+"', '"+rs1.getString("dob")+"')");
}
我在stmt.executeUpdate上得到一个错误。这就是错误:
java.lang.Error: Unresolved compilation problems:
Syntax error, insert ")" to complete MethodInvocation
Syntax error, insert ";" to complete Statement
Syntax error on token "]", AssignmentOperator expected after this token
Syntax error on token ")", delete this token
CreateTheTeams.doGet(CreateTheTeams.java:69)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
如何修复错误?行
stmt.executeUpdate("Insert into "teams[team]" values ('"+rs1.getString("studentno")+"', '"+rs1.getString("firstname")+"', '"+rs1.getString("surname")+"', '"+rs1.getString("degreecode")+"', '"+rs1.getString("dob")+"')");
有一个编译错误。您需要添加+来连接语句中的字符串:
stmt.executeUpdate("Insert into "+teams[team]+" values ('"+rs1.getString("studentno")+"', '"+rs1.getString("firstname")+"', '"+rs1.getString("surname")+"', '"+rs1.getString("degreecode")+"', '"+rs1.getString("dob")+"')");
您的Java源文件中有语法错误,这与Servlet直接无关 请注意,在代码的这一部分:
stmt.executeUpdate("Insert into "teams[team]" values ('"+ // more code here
没有任何+
与“插入到”
、团队[团队]
和值(“
)相关。若要开始解决问题,请将该部分更改为:
stmt.executeUpdate("Insert into "+teams[team]+" values ('"+ // more code here
// ^ ^
从错误消息中,您可以自己判断:
java.lang.Error:未解决的编译问题:
声明您的文件甚至无法编译
但最好的部分是:
CreateTheTeams.doGet(CreateTheTeams.java:69)
告诉您查找错误的位置:在CreateTeams.java文件的69行。下次看到类似的内容时,请转到该行并仔细阅读,这可能会节省您一些时间。您有两个错误:
字符串无效
语句
。执行第二个操作时,已执行操作的结果集
将丢失"Insert into "teams[team]" values ('"+rs1.getString("studentno")+"', '"+rs1.getString("firstname")+"', '"+rs1.getString("surname")+"', '"+rs1.getString("degreecode")+"', '"+rs1.getString("dob")+"')"
您需要相应地连接字符串
s:
//note the usage of + signs between teams[team]
"Insert into " + teams[team] + " values ('" + rs1.getString("studentno") +
"', '"+ rs1.getString("firstname") + "', '" + rs1.getString("surname")+
"', '" + rs1.getString("degreecode") + "', '" + rs1.getString("dob")+ "')"
语句
:
String insertSql = "Insert into " + teams[team] + " values ('" + rs1.getString("studentno") +
"', '"+ rs1.getString("firstname") + "', '" + rs1.getString("surname")+
"', '" + rs1.getString("degreecode") + "', '" + rs1.getString("dob")+ "')";
Statement stmtInsert = connection.createStatement(insertSql);
stmtInsert.executeUpdate();
但如果您使用PreparedStatement
来避免SQL注入,这将更好。为此,请将代码更改为:
String insertSql = "Insert into " + teams[team] + " values (?, ?, ?, ?, ?)";
PreparedStatement pstmtInsert = connection.prepareStatement(insertSql);
pstmt.setParameter(1, rs1.getString("studentno"));
pstmt.setParameter(2, rs1.getString("firstname"));
pstmt.setParameter(3, rs1.getString("surname"));
pstmt.setParameter(4, rs1.getString("degreecode"));
pstmt.setParameter(5, rs1.getString("dob"));
pstmtInsert.executeUpdate();
pstmtInsert.close();
此外,这不是一个错误,但似乎从未更新
count
变量,因此if(count==3)
永远不会发生。要修复它,请在执行DML insert操作后添加一个count++
。这只解决了编译问题,但仍然为两个不同的操作保留了语句的用法。事实上。实际上我根本没有研究代码的语义。我希望+
只是修复了问题的开始(问题中所述)。由于重用了语句,关闭的结果集,应该立即产生异常,并指出行(我希望在这方面有所帮助)。具体问题的直接解决方案是使用conn.createStatement().executeUpdate(“插入到”+团队[团队]+…
,但代码似乎有更多的问题(名为“蓝色团队”
?),这就是为什么我没有在反馈之前解决所有可能的问题。通过阅读OP在代码中的评论,似乎在最后阶段,他/她需要让每个团队都有不同的学生。非常感谢您的帮助!是的,“蓝色团队”是一项大学作业:)!名字没问题。我指的是桌子名称中的空格。并不是说它不存在,而是通常需要转义,比如插入到'blueteam'值中…
。无论如何,在那里使用空格是不好的、容易出错的做法。