java servlet中的错误

时间:2013-11-06 20:39:56

标签: java sql servlets

对不起我会问的菜鸟问题。我是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)

如何修复错误?

提前感谢您的理解和帮助!

3 个答案:

答案 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)

您有两个错误:

  1. 编译错误,因为您的String无效。
  2. 对两个不同的操作使用相同的Statement。执行第二个操作时,已执行操作的ResultSet将丢失。
  3. 解决每一个问题:

    1. 这不是有效的字符串:

      "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")+ "')"
      
    2. 最好使用新的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();
      
    3. 此外,不是错误,但似乎您永远不会更新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")+"')");