只返回JDBC的数据库的最后记录

时间:2013-12-04 12:40:46

标签: java jdbc database-connection

我有一个登录页面,并且建立了与我的数据库的连接并且在数据库中可见1条记录时正常工作但是当有2个条目(2个管理员用户)时,只有最后一个条目适用于登录而不是原来并不明白为什么!下面显示了我创建的整个代码,所以如果有人能给我一些关于这个问题的见解,我将不胜感激,谢谢!

 package securitySystem;

 import java.awt.*;

 import javax.swing.*;

 import java.sql.*;
 import java.awt.event.*;

public class loginPage extends JFrame {

public static void main (String args[]){
    loginPage gui= new loginPage ();
    gui.setSize (400, 400);
    gui.setLocationRelativeTo(null);
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setVisible(true);
    gui.setTitle("Login Page");

}   

JLabel lblUserName= new JLabel("UserName:");
JTextField txtUserName= new JTextField(15);
JLabel lblPassword= new JLabel("Password:");
JTextField txtPassword= new JTextField(15);
JButton btnForgotten= new JButton("Forgotten Login");
JButton btnLogin= new JButton("Login");

public loginPage (){
    setLayout (null);

    //JLabel lblUserName= new JLabel("UserName:");
    lblUserName.setBounds(100,100,110,30);
    add(lblUserName);

    //JTextField txtUserName= new JTextField(15);
    txtUserName.setBounds(170,100,110,30);
    add(txtUserName);

    //JLabel lblPassword= new JLabel("Password:");
    lblPassword.setBounds(100,150,110,30);
    add(lblPassword);

    //JTextField txtPassword= new JTextField(15);
    txtPassword.setBounds(170,150,110,30);
    add(txtPassword);

    //JButton btnLogin= new JButton("Login");
    btnLogin.setBounds(100,300, 70, 30);
    add(btnLogin);
    actionlogin();

    //JButton btnForgotten= new JButton("Forgotten Login");
    btnForgotten.setBounds(175,300, 130, 30);
    add(btnForgotten);


}

public void actionlogin()
{
    btnLogin.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent ae) 
        {

            String username = txtUserName.getText();
            String password = txtPassword.getText();

            String databaseUsername = "";
            String databasePassword = "";

            String dataSourceName = "securitySystem";
            String dbUrl = "jdbc:odbc:" + dataSourceName;

            try{
                //Type of connection driver used    
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                //Connection variable or object param: dbPath, userName, password
                Connection con = DriverManager.getConnection(dbUrl, "", "");

                Statement statement = con.createStatement();

                ResultSet rs = statement.executeQuery("select username, password  from employee");

                while (rs.next()) {
                    databaseUsername = rs.getString("username");   //resultSet.getString("username");
                    databasePassword = rs.getString("password");
                }  

                statement.close();
                con.close();
            }catch (Exception e) {
                try {
                    throw e;
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            //Compare the user entered info to the database info
            if(username.equals(databaseUsername) && password.equals(databasePassword)) 
            {
                adminMenu gui =new adminMenu();
                gui.setSize (400, 400);
                gui.setLocationRelativeTo(null);
                gui.setVisible(true);
                dispose();
            }
            else 
            {
                JOptionPane.showMessageDialog(null,"Wrong Password / Username");
                txtUserName.setText("");
                txtPassword.setText("");
                txtUserName.requestFocus();
            }               
        }
    });
}

}

3 个答案:

答案 0 :(得分:0)

这是因为

while (rs.next()) {
                    databaseUsername = rs.getString("username");   //resultSet.getString("username");
                    databasePassword = rs.getString("password");
                } 

对于第一行rs.next(),返回true databaseUsernamedatabasePassword获取第一行记录。现在第二行rs.next()再次返回true,因此{{ 1}}和databaseUsername得到第二条记录,现在rs.next()返回false,所以控制来自循环,最后databasePassworddatabaseUsername有最后一个数据行

如果用户名与databaseusername

匹配,您正在尝试此部分
databasePassword

试试这种方式

adminMenu gui =new adminMenu();
                gui.setSize (400, 400);
                gui.setLocationRelativeTo(null);
                gui.setVisible(true);
            dispose();

答案 1 :(得分:0)

看看你的代码:

while (rs.next()) {
    databaseUsername = rs.getString("username");   //resultSet.getString("username");
    databasePassword = rs.getString("password");
}

如果有多行会发生什么?循环将多次运行,每次都会覆盖databaseUsernamedatabasePassword中的值。完成后,它将包含上次循环运行的值。

(另外,将纯文本密码存储在数据库中是一个非常糟糕的主意。)

答案 2 :(得分:0)

循环记录然后覆盖相同的字符串。登录应该是唯一的,所以你应该在if语句中检查它。