2014-02-23 23 views
0

我正在使用登录表单。这段代码是从数据库中检查日志的详细信息。我能够在提供正确的用户名和密码时登录,但显示一个例外。我的代码如下:为什么“不能为SELECT发出executeUpdate()”SQLException显示?

public void signin() throws ClassNotFoundException, SQLException 
{ 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     connect2 = DriverManager 
     .getConnection("jdbc:mysql://localhost:3306/mysql?" 
      + "user=root&password=virus"); 

     statement2 = connect2.createStatement(); 

     preparedStatement2 = connect2 
     .prepareStatement("select username,password from "+t11.getText()+";"); 
     resultSet2 = preparedStatement2.executeQuery(); 
     writeResultSet(resultSet2); 

     preparedStatement2.executeUpdate(); 
       } 
    catch (ClassNotFoundException | SQLException e) { 
    throw e; 
} finally { 
    close1(); 
} 
    } 

private void writeResultSet(ResultSet resultSet) throws SQLException { 

while (resultSet.next()) { 

    String username = resultSet.getString("username"); 
    String password = resultSet.getString("password"); 
    String usr = (String)t11.getText(); 
    String pwd = (String)pw11.getText(); 

    if(t11.getText().equals(username) && pwd.equals(password)) 
    { 
    ((Stage)b1.getScene().getWindow()).setScene(new Scene(new UserPage())); 
    } 
    else 
    { 
      //...THIS IS WHERE I WANT TO DISPLAY THE ALERT BOX 
    } 
} 
} 

private void close1() { 
try { 

    if (resultSet2 != null) { 
    resultSet2.close(); 
    } 

    if (statement != null) { 
    statement.close(); 
    } 

    if (connect != null) { 
    connect.close(); 
    } 
} catch (SQLException e) { 

} 
} 

唯一的例外是:

java.sql.SQLException: Can not issue executeUpdate() for SELECTs 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2416) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359) 
at login.Login.signin(Login.java:159) 
at login.Login$1.handle(Login.java:118) 
at login.Login$1.handle(Login.java:113) 

为什么出此异常?我该如何纠正它?

+0

@jewelsea如果我上面提到的查询工作正常,那么prepareStatement2和resultSet2的值是什么? – TomJ

+0

这是一个完全不同的问题TomJ,请不要在评论中提出新问题。结果集应该包含查询结果(在这种情况下,用户名和密码)。您可以阅读[基本JDBC教程](http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html)以进一步了解结果集。 – jewelsea

+0

@jewelsea还行。谢谢。 – TomJ

回答

4

问题是您没有适当地使用JDBC。你为什么用select查询调用executeUpdate?您可能想尝试使用executeQuery。使用JDBC的简单SQL选择查询的Here is an example

此外,请小心不要编写可能对SQL注入敏感的代码。