// 为什么我总是不能登录, 测试了连接数据库是成功了, 
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Login extends JFrame implements ActionListener{
JLabel l1 = new JLabel("用户名 :");
JLabel l2 = new JLabel("密      码  :");
JLabel l3 = new JLabel("欢迎您登录...");
JTextField t1 = new JTextField("", 10);
JPasswordField t2 = new JPasswordField("", 10);
JButton b1 = new JButton("登  录");
JButton b2 = new JButton("取  消");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();

String pass;
Connection con;
Statement stmt;
ResultSet rs;
String url = "jdbc:odbc:login";

Login()throws Exception{
super("登录模块");
this.add(p1); 
this.add(p2);
this.add(p3);
this.add(p4);
p1.add(l3);  
p2.add(l1); p2.add(t1);
p3.add(l2); p3.add(t2); 
t2.setEchoChar('*');
p4.add(b1); p4.add(b2);
b1.addActionListener(this);
b2.addActionListener(this);

setLayout(new GridLayout(4,1));
this.add(p1);
this.add(p2);
this.add(p3);
this.add(p4);
setBounds(400, 250, 400, 300);
setResizable(false);
setVisible(true);


} public static void main(String[] args) throws Exception {
new Login();
} public void actionPerformed(ActionEvent e) {
if(e.getSource() == b1){
if(t1.getText().trim().equals("")|| t2.getPassword().toString().trim().equals("")){
l3.setText("用户名和密码不能为空");
}
else{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url, "sa", "");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT*FROM login where name="+ "'" +t1.getText()+ "'");
while(rs.next()){                         // login 是要查询表  表中字段名分别有:用户名(name),密码 (password)
pass = rs.getString(2);
//System.out.println(pass);

}
if(t2.getPassword().toString().trim().equals(pass)){
l3.setText("登录成功!");
t1.setText("");
t2.setText("");
}
else{ 
l3.setText("用户名和密码错误!");
}
}
    catch(Exception e2){
    }
}
}
}
}

解决方案 »

  1.   

     rs.getString(2); 
    此处最好改为rs.getString("password");
    另:你的while(rs.next()),能进入此循环吗?
      

  2.   


     rs.getString(2); 
     rs.getString("password"); 
     这两个应该说没好大区别吧? 但是我改了,, 我测试while循环似乎进行了,, 
      

  3.   

    while(rs.next()){                        
       pass = rs.getString(2); 
    System.out.println(pass); 
    }  测试过, 即使输入的错误密码都会打印出来正确的密码,, 但是好像都是下面那个if语句的里面的条件是不是有点问题,, 还请继续解答,, 不胜感激!!
      

  4.   

    我猜测啊,你那张表还有别的字段啊,最好使用username,password啊
    (t2.getPassword().toString().trim().equals(pass))多加几个括号,限定执行顺序
      

  5.   


     没有别的字段啊,, 就两个字段,, name 和 password
      

  6.   


     好了  谢谢大家 我已经解决了问题  现在与大家分享一下!
     下面是改正后的代码:
    public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == b1){ 
    if(t1.getText().equals("")|| String.valueOf(t2.getPassword()).equals("")){ 
    l3.setText("用户名和密码不能为空"); 

    else{ 
    try{ 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    con = DriverManager.getConnection(url, "sa", ""); 
    stmt = con.createStatement(); 
    rs = stmt.executeQuery("SELECT*FROM login where name="+ "'" +t1.getText()+ "'"); 
    while(rs.next()){                       
    pass = rs.getString(2).trim(); 

    if(String.valueOf(t2.getPassword()).equals(pass)){ 
    l3.setText("登录成功!"); 
    t1.setText(""); 
    t2.setText(""); 

    else{ 
    l3.setText("用户名和密码错误!"); 


        catch(Exception e2){ 
        }