对不起我会问的菜鸟问题。我是java servlets的新手!这是我的代码:
String[] teams = {"Blue Team", "Red Team", "Yellow Team", "Green Team", "Orange Team"};
int count = 0, team = 0;
String selectSQL = "select * from students"; // rand and dinstinct
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)
如何修复错误?
提前感谢您的理解和帮助!
答案 0 :(得分:1)
您的Java源文件中存在语法错误,这与Servlet没有任何关系。
请注意代码的这一部分:
stmt.executeUpdate("Insert into "teams[team]" values ('"+ // more code here
+
,"Insert into "
和teams[team]
没有" values ('"
串联。要开始解决您的问题,请将该部分更改为:
stmt.executeUpdate("Insert into "+teams[team]+" values ('"+ // more code here
// ^ ^
从错误消息中,您可以自己解决这个问题:
java.lang.Error: Unresolved compilation problems:
表示您的文件甚至无法编译。
但最好的部分:
CreateTheTeams.doGet(CreateTheTeams.java:69)
告诉您发现错误的位置: CreateTheTeams.java 文件的 69 行。下次你看到类似的东西,到达那条线并仔细阅读,这可能会节省你一些时间。
答案 1 :(得分:1)
您有两个错误:
String
无效。Statement
。执行第二个操作时,已执行操作的ResultSet
将丢失。解决每一个问题:
这不是有效的字符串:
"Insert into "teams[team]" values ('"+rs1.getString("studentno")+"', '"+rs1.getString("firstname")+"', '"+rs1.getString("surname")+"', '"+rs1.getString("degreecode")+"', '"+rs1.getString("dob")+"')"
您需要相应地连接String
:
//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")+ "')"
最好使用新的Statement
:
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插入操作后添加count++
。
答案 2 :(得分: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("Insert into "+teams[team]+" values ('"+rs1.getString("studentno")+"', '"+rs1.getString("firstname")+"', '"+rs1.getString("surname")+"', '"+rs1.getString("degreecode")+"', '"+rs1.getString("dob")+"')");