java.sql.SQLException: No value specified for parameter 2

Janelle Ann Lagatuz picture Janelle Ann Lagatuz · Nov 18, 2014 · Viewed 17.5k times · Source

I have here my code for login and I am encountering this error, "java.sql.SQLException: No value specified for parameter 2"

sometimes, "java.sql.SQLException:Parameter index out of range (1> number of parameters, which is 0)." I really don't have any idea.

 import java.sql.*;
 import javax.swing.*;
 public class Login_form extends javax.swing.JFrame {
 Connection conn=null;
 ResultSet rs = null;
 PreparedStatement pst = null;

 public Login_form() {
    initComponents();
    conn=javaconnect.ConnecrDb();
}


// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jLabel2 = new javax.swing.JLabel();
    jLabel1 = new javax.swing.JLabel();
    txt_password = new javax.swing.JPasswordField();
    txt_user = new javax.swing.JTextField();
    btn_login = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Login", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Trebuchet MS", 1, 18), new java.awt.Color(255, 153, 0))); // NOI18N

    jLabel2.setText("Password:");

    jLabel1.setText("Username:");

    btn_login.setText("Log-In");
    btn_login.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btn_loginActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jLabel1)
                .addComponent(jLabel2))
            .addGap(1, 1, 1)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(txt_password)
                .addComponent(txt_user, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addContainerGap())
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
            .addContainerGap(100, Short.MAX_VALUE)
            .addComponent(btn_login)
            .addGap(36, 36, 36))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(txt_user, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel1))
            .addGap(18, 18, 18)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabel2)
                .addComponent(txt_password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(18, 18, 18)
            .addComponent(btn_login)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addGap(169, 169, 169)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGap(24, 24, 24))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(52, 52, 52)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(93, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

private void btn_loginActionPerformed(java.awt.event.ActionEvent evt) {

    //String user=txt_user.getText();
    //String pwd = txt_password.getText();
    String sql = "select * from users_employee where username=? and password=?";
    //  JOptionPane.showMessageDialog(null, sql);

    try{

    pst=conn.prepareStatement(sql);
    pst.setString(1,txt_user.getText());
    pst.setString(1,txt_password.getText());

    rs=pst.executeQuery();

    if(rs.next()){
       /* for(int i=1;i<4;i++)
        {

        }*/
        JOptionPane.showMessageDialog(null, "Succesfully Login");
        new home().setVisible(true);
        this.hide();



    }
    }

    catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
        new Login_form().setVisible(true);
    }
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new Login_form().setVisible(true);
        }
    });
}
// Variables declaration - do not modify
private javax.swing.JButton btn_login;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPasswordField txt_password;
private javax.swing.JTextField txt_user;
// End of variables declaration

}

Answer

Eran picture Eran · Nov 18, 2014

You are assigning both the user and the password to the same parameter (1).

Change this:

pst.setString(1,txt_user.getText());
pst.setString(1,txt_password.getText());

to this:

pst.setString(1,txt_user.getText());
pst.setString(2,txt_password.getText());