// 为什么我总是不能登录, 测试了连接数据库是成功了,
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){
}
}
}
}
}
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){
}
}
}
}
}
此处最好改为rs.getString("password");
另:你的while(rs.next()),能进入此循环吗?
rs.getString(2);
rs.getString("password");
这两个应该说没好大区别吧? 但是我改了,, 我测试while循环似乎进行了,,
pass = rs.getString(2);
System.out.println(pass);
} 测试过, 即使输入的错误密码都会打印出来正确的密码,, 但是好像都是下面那个if语句的里面的条件是不是有点问题,, 还请继续解答,, 不胜感激!!
(t2.getPassword().toString().trim().equals(pass))多加几个括号,限定执行顺序
没有别的字段啊,, 就两个字段,, name 和 password
好了 谢谢大家 我已经解决了问题 现在与大家分享一下!
下面是改正后的代码:
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){
}
}
}
}