2017-05-18 4 views
-1

Ich arbeite an einer Login-Seite mit Java-Anwendung, versuchen, es mit einer Access-Datenbank zu verbinden, die ich erstellt habe, wollen nur eine einfache Abfrage auswählen, ob der eingegebene Benutzername und das Passwort gültig sind, Ich bekomme keine Fehler bei der Ausführung, aber der Button funktioniert nicht, irgendwelche Ideen? HierJava Login Seite funktioniert nicht

ist der Code:

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 ll= 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:db1"; 
     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(ll); 
     p.add(t1); 
     p.add(b); 
     f.add(p); 

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

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

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

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

     } 
     catch(Exception ex) 
     {} 
    } 
}); 

} 


public static void main(String [] args) 
{ 
    new Login(); 
} 

} 

Antwort

0

Was genau meinst du mit "die Taste funktioniert nicht"? Das Ereignis wird nie ausgelöst oder die Tatsache, dass der Code innerhalb des Ereignisses keine Ergebnisse für Sie liefert?

Wenn Sie nur eine Datenanzahl nicht benutzen wollen, um zu bestimmen, ob eine bestimmte Benutzer/Passwort vorhanden ist, dann würde Ich mag Sie es auf diese Weise tun vorschlagen:

int count = 0; 
conn.setAutoCommit(false); 
PreparedStatement stmt = conn.prepareStatement("SELECT COUNT(*) AS rCount FROM Users WHERE username = '" + user + "' AND password = '" + pass + "';"); 
ResultSet rs = stmt.executeQuery(); 
while (rs.next()) { 
    count = rs.getInt("rCount"); 
} 
rs.close(); 
stmt.close(); 

if (count != 0) { 
    JOptionPane.showMessageDialog(null, "User Found, Access Granted!"); 
} 

Allerdings konnte man sehr gut auch tun es auf diese Weise:

conn.setAutoCommit(false); 
PreparedStatement stmt = conn.prepareStatement("SELECT username, password FROM Users WHERE username = '" + user + "' AND password = '" + pass + "';"); 
ResultSet rs = stmt.executeQuery(); 
String un = ""; 
String up = ""; 
while (rs.next()) { 
    un = rs.getString("username"); 
    up = rs.getString("password"); 
    // or any other table fields you want... 
} 
rs.close(); 
stmt.close(); 

if (!un.equals("") && !up.equals("")) { 
    JOptionPane.showMessageDialog(null, "User Found, Access Granted!"); 
} 

vielleicht möchten Sie auch mit der UCanAccess Bibliothek einen Blick darauf werfen. Es funktioniert ziemlich gut mit MS Access.