0

经过大惊小怪,我使用了 JAVA DB,现在使用 apache Derby 客户端驱动程序来使用,最终进入我的数据库后,我遇到了一个新问题

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String uname = jTextField1.getText();
    String strpass = jPasswordField1.getText();
    String newpass = jPasswordField2.getText();
    String conpass = jPasswordField3.getText();

    try
    {
    DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());
    }
    catch(SQLException ex1)
    {
        ex1.printStackTrace();
    }

      try      
    {

        Class.forName("org.apache.derby.jdbc.ClientDriver");
    }
    catch(ClassNotFoundException ex)
    {
        ex.printStackTrace();
    }
    try
    {
        Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/niiitusers");
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("Select * from app.userlogin");
        while(rs.next())
        {
            String usrname = rs.getString("username");
            String passwd = rs.getString("password");
            if(uname.equals(usrname) && strpass.equals(passwd))
            {

                if(newpass.equals(conpass))
                {
                    Statement st1 = con.createStatement();
                    ResultSet i = st1.executeQuery("UPDATE app.userlogin SET password='newpass' where username='usname'");//query i am using to update the password
                    JOptionPane.showMessageDialog(null, "PASSWORD UPDATE SUCCESSFUL");

                }

                else
                {
                    JOptionPane.showMessageDialog(null, "PLEASE CONFIRM PASSWORD");
                }}
            else if(uname.equals("") && strpass.equals("") && newpass.equals(""))
            {
                JOptionPane.showMessageDialog(null, "PLEASE ENTER ALL INFORMATION");
            }
            else
            {
                JOptionPane.showMessageDialog(null, "USERNAME NOT FOUND");
            }
            st.close();

            con.close();
        }

    }
            catch(SQLException e)
            {
                e.printStackTrace();
            }



}                                        

java.sql.SQLException: executeQuery method can not be used for update.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.Statement.executeQuery(Unknown Source)

它不执行更新操作。我不确定问题出在哪里

4

3 回答 3

1

不要使用 executeQuery 来更新密码。相反,使用 executeUpdate 进行更新。并且它没有Resultset 像这样使用它

    if(newpass.equals(conpass))
            {
                Statement st1 = con.createStatement();
                st1.executeUpdate("UPDATE app.userlogin SET password='newpass' where  
    username='usname'");
                JOptionPane.showMessageDialog(null, "PASSWORD UPDATE SUCCESSFUL");

            }
于 2013-07-08T16:38:40.563 回答
1

它没有显示任何输出,因为您的 catch 块中没有任何内容。

首先,这需要改变......

catch (SQLException ex) {
   e.printStackTrace();
} }

其次,我会看一些明显的东西,你是否使用了正确的凭据?数据库的 IP 地址是否正确?

无论哪种方式,堆栈跟踪都会为您提供所需的答案。

于 2013-04-07T13:22:41.460 回答
0

remove rs and use executeUpdate() instead of executeQuery()

the last else statement is also unnecessary

于 2020-02-10T08:59:48.743 回答