我想在netbeans中的数据库使用按钮中调用ID和密码,所以我确实喜欢此
private void loginActionPerformed(java.awt.event.ActionEvent evt) {
try {
String sql="select *from login where ID = '"+id.getText()+"'and Password = '"+String.valueOf(pass.getPassword())+"'and Status ='"+pilih1.getSelectedItem().toString()+"'";
ResultSet rss1=st.executeQuery(sql);
if ((rss1.next())&&(pilih1.getSelectedItem().toString() == "Pasien")){
pasien1 = new pasien1();
pasien1.setVisible(true);
this.dispose();
System.out.println("haha");
}
else if ((rss1.next())&&(pilih1.getSelectedItem().toString() == "Dokter")){
dokter1 = new dokter1();
dokter1.setVisible(true);
this.dispose();
}
else if ((rss1.next())&&(pilih1.getSelectedItem().toString() == "Staff")){
staff1 = new staff1();
staff1.setVisible(true);
this.dispose();
}
else{
JOptionPane.showMessageDialog(null, "Gagal Login");
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Terjadi Kesalahan");
}
}
此源代码可以编译我没有错误但是为什么此代码只能在其他情况下才能执行,并且在提供解决方案。。。
这里有两个主要问题:
- java中的
String
s是对象,因此需要将它们与equals
方法进行比较,而不是==
运算符,该方法检查对象 IDENSITY ,而不是 equality 。li> - 调用
ResultSet.next()
将推进光标,因此您应该在之前进行。在当前代码中,每次评估一个条件时,都将提出光标,这不是您要高的行为。
简而言之:
ResultSet rss1=st.executeQuery(sql);
boolean hasResults = rss1.next()
if (hasResults && pilih1.getSelectedItem().toString().equals("Pasien")) {
pasien1 = new pasien1();
pasien1.setVisible(true);
this.dispose();
System.out.println("haha");
}
else if (hasResults && pilih1.getSelectedItem().toString().equals("Dokter")) {
dokter1 = new dokter1();
dokter1.setVisible(true);
this.dispose();
}
else if (hasResults && pilih1.getSelectedItem().toString().equals("Staff")){
staff1 = new staff1();
staff1.setVisible(true);
this.dispose();
}
else{
JOptionPane.showMessageDialog(null, "Gagal Login");
}