2013-05-29 50 views
0

我正在嘗試使用Java創建登錄表單。Java Access登錄表單問題db

我創建了表單,但似乎無法連接到數據庫,或者從數據庫中檢索用戶名和密碼。

這裏是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錯誤」,這是我成立。

這可能是一些愚蠢的,就像一個錯過的字符,但任何幫助將不勝感激。

非常感謝。

+0

你有什麼異常? – jtahlborn

回答

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 

的解決辦法是installl &使用32位版本的Java而不是64位的JDK/JRE。

+0

增加了空間,但沒有改變。 :/ –

+0

感謝關於注入攻擊的提示。 –

+0

我添加了printstack,但沒有任何效果。 –