mysqleclipseswingmysql-workbenchcorba

how can i connect to my database sql in a java class method and called it in another class?


i'm trying to create a desktop application using corba and java swing for graphical interface.

As you know , in CORBA we have to make the principal methods like: connecting to the database ,calculations... in the server ,so i have created a method in a server class for connecting to the database.

The java class method is the one shown bellow:

public  void connect_db(){
    // TODO Auto-generated method stub

    JTextField txtUsername = FrameLogin.txtUsername;
     JPasswordField pwd= FrameLogin.pwd;
    JLabel lblLoginMessage= FrameLogin.lblLoginMessage;
    
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn =(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/utilisateurs","root", "Mrayhana123");
        Statement stm = conn.createStatement();
        String sql="select * from etudiant where username='"+txtUsername+"' and pwd='"+pwd+"'";
        ResultSet result = stm.executeQuery(sql);
        if(result.next()){
            lblLoginMessage.setText("you are connected");
            lblLoginMessage.setForeground(Color.GREEN);
        
        
        }
        else {
            lblLoginMessage.setText("Incorrect username or password!");
            lblLoginMessage.setForeground(Color.RED);
        }

    } catch(Exception e){
        //System.out.println("not connected to database");
        e.printStackTrace();
}
}

And i have called it in the client class which contain the graphical interface by the following way:

public static JTextField txtUsername;
   public static JPasswordField pwd;
   public static JLabel lblLoginMessage = new JLabel("");

 pnlBtnlogin.addMouseListener(new MouseAdapter() {
            @Override
            
                  String username = txtUsername.getText();
                    String pwd= pwd.getText();
                    
                    try {
                        
                        SraCorbaImpl sci = new SraCorbaImpl();
                        sci.connect_db();
                        
                    } catch(Exception e1){
                        //System.out.println("not connected to database");
                        e1.printStackTrace();               
                        }
                    

But the result always shows me Incorrect username or password! even though I type a username and a password which are in the database.

THANK YOU FOR HELPING ME


Solution

  • According to your comment, I understand that you are successfully connecting to the database but your query is not returning any rows.

    If the code in your question is your actual code, then you are passing a JTextField to your [SQL] query and not the text of the JTextField. Likewise with the password. You are passing the JPasswordField and not the actual password.

    Try the below code.

    public  void connect_db(){
        JTextField txtUsername = FrameLogin.txtUsername;
        JPasswordField pwd= FrameLogin.pwd;
        JLabel lblLoginMessage= FrameLogin.lblLoginMessage;
        try {
    //        Class.forName("com.mysql.cj.jdbc.Driver"); <- not required
            Connection conn =(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/utilisateurs","root", "Mrayhana123");
            Statement stm = conn.createStatement();
            String sql="select * from etudiant where username='"+txtUsername.getText()+"' and pwd='"+pwd.getText()+"'";  // Change here.
            ResultSet result = stm.executeQuery(sql);
            if(result.next()){
                lblLoginMessage.setText("you are connected");
                lblLoginMessage.setForeground(Color.GREEN);
            }
            else {
                lblLoginMessage.setText("Incorrect username or password!");
                lblLoginMessage.setForeground(Color.RED);
            }
        } catch(Exception e){
            //System.out.println("not connected to database");
            e.printStackTrace();
    }
    

    Because you are using string concatenation, the toString of JTextField is being inserted into your SQL string.

    Consider using a PreparedStatement instead.

    String sql="select * from etudiant where username=? and pwd=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, txtUsername.getText());
    ps.setString(2, pwd.getText());
    

    In that case, if you omit the .getText(), the code will not compile.