I want to print the user name after logging in with his ID in another JFrame
I followed this method but it does not work
//this class to login
public mClass() {
// Frame build :
setSize(800, 600);
setTitle(" page1 ");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Toolkit toolkit = getToolkit();
Dimension size = toolkit.getScreenSize();
setLocation(size.width / 2 - getWidth() / 2,
size.height / 3 - getHeight() / 3);
//Panel & BackGround :
JPanel panel = new JPanel();
getContentPane().add(panel);
panel.setLayout(null);
panel.setBackground(Color.decode("#DFDDCE"));
// text box
JTextField user = new JTextField();
user.setBounds(245, 300, 300, 40);
user.setFont(newFonts);
user.setForeground(Color.decode("#5195E1"));
panel.add(user);
// text for box :
JLabel tx = new JLabel(" Enter your ID to login.");
tx.setBounds(245, 30, size.width, size.height);
panel.add(tx);
//submit button :
JButton login = new JButton(" login ");
login.setBounds(245, 355, 300, 40);
login.setBorder(new LineBorder(Color.decode("#5195E1")));
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Class.forName("com.mysql.jdbc.Driver");
String host = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String uName = "root"; String uPass = "dataroot";
Connection con = DriverManager.getConnection(host, uName, uPass);
String password=user.getText();
String sql = "SELECT * FROM mstable where m_pass=? ";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1,password);
ResultSet rs = pst.executeQuery();
if(rs.next()) {
new welcomeMs();
dispose();
}
else { JOptionPane.showMessageDialog(null,"wrong id , Please try again ");
} }
catch ( SQLException ex) { System.out.println(ex); }
} });
panel.add(login);
//back button :
setVisible(true);
}
public String getuserName() {
return this.user;
}
}
i want to show the name in this class
// i extend this class to the last Class
try {
// Class.forName("com.mysql.jdbc.Driver");
String host = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String uName = "root";
String uPass = "dataroot";
Connection con = DriverManager.getConnection(host, uName, uPass);
String sql = "SELECT m_name FROM mstable where m_pass = 'getuserName()' ";
PreparedStatement pst = con.prepareStatement(sql);
//pst.setString(1, getuserName());
ResultSet rs = pst.executeQuery();
rs.next();
JLabel label = new JLabel();
label.setText(rs.getString(1) + " welcome ");
label.setBounds(402, -295, size.width, size.height);
panel.add(label);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,ex);
}
f.setVisible(true);
When I try to log in, this message appears " lllegal operation on empty result set " or when i remove the // " Parameter index is out of range (1> number of parameters, which is 0)." i think error at
pst.setString(1, getuserName());
//or
label.setText(rs.getString(1) + " welcome ");
From your error message it is clear that your query is returning resultset that contains 0 rows and 1 column. I assume that you want to compare column m_pass
to returned value of JAVA function getuserName()
(Or you might want to compare with user password).
You can try following:
String sql = "SELECT m_name FROM mstable where m_pass = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, getuserName()); //Or any string that you want to compare
if (rs.next()) {
// record found
}
else {
// record not found
}
Read more about PreparedStatement and JDBC ResultSet. Hope it helps!