MS Access数据库的Java登录表单问题

时间:2013-05-29 16:17:43

标签: java database ms-access login try-catch

我正在尝试使用Java创建一个登录表单。

我已创建表单,但似乎无法连接到数据库,或从数据库中检索用户名和密码。

这是Login.java代码:

    package login;

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


public class Login {


    Connection con;
    Statement st;
    ResultSet rs;

    JFrame f = new JFrame("User Login");
    JLabel l = new JLabel("Username");
    JLabel l1 = new JLabel("Password");
    JTextField t = new JTextField(10);
    JTextField t1 = new JTextField(10);
    JButton b = new JButton("Login");


    public Login()
    {
        connect();
        frame();

    }

    public void connect()
    {
        try
        {

            String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(driver);

            String db = "jdbc:odbc:credentials";
            con = DriverManager.getConnection(db);
            st = con.createStatement();

        }
        catch(Exception ex)
        {


        }
    }

    public void frame()
    {
        f.setSize(600,400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);

        JPanel p = new JPanel();
        p.add(l);
        p.add(t);
        p.add(l1);
        p.add(t1);
        p.add(b);

        f.add(p);

        b.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                String username = t.getText().trim();
                String password = t1.getText().trim();

                String sql = "select user, pass from users where user = '" +username+"'and pass = '"+password+"'" ;
                rs = st.executeQuery(sql);

                int count = 0;
                while(rs.next())
                {
                    count ++;
                }

                if(count == 1)
                {

                }
                else if(count > 1)
                {
                    JOptionPane.showMessageDialog(null, "Duplicate User, Access Denied!");
                }
                else
                {
                    JOptionPane.showMessageDialog(null, "User Not Found!");
                }




                }

                catch(Exception ex)
                {
                   JOptionPane.showMessageDialog(null, "Catch Error");         
                }
            }


        });


    }   


    public static void main(String[] args) {

        new Login();

    }
}

当程序运行时,它会绕过用户的检索并传递,并输出我设置的“catch error”。

这可能是一个愚蠢的事情,就像一个错过的角色,但任何帮助都会非常感激。

非常感谢。

1 个答案:

答案 0 :(得分:1)

在单引号后面插入一个空格

String sql = "select user, pass from users where user = '"
         + username + "'and pass = '" + password + "'";
                       ^

此外,通过添加以下内容显示异常中的确切消息:

ex.printStackTrace();

在异常块中。

除此之外:使用PreparedStatement而不是Statement来防止SQL注入攻击

编辑:

显示堆栈跟踪:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application at 

解决方案是安装&使用32位版本的Java而不是64位JDK / JRE版本。