2011-12-08 19 views
2

Java JTextfieldとPasswordfieldでパスワードとユーザー名を取得できないようですが、ユーザー入力を比較し、ユーザー名とパスワードがデータベースに格納されているかどうかを確認していますもしそうなら、彼らはログインしますが、私のパスワードフィールドのgetText()は廃止されました。どうすればこの問題を解決できますか?Java JDBCログインフォーム

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.*; 
import javax.swing.JOptionPane; 

public class Login extends JFrame { 

private JLabel nameLabel; 
private JLabel passwordLabel; 
private JTextField nameText; 
private JPasswordField passwordField; 
private JButton submitButton; 
Connection conn = null; 

public Login(){ 

super("Log in!"); 
setLayout(new FlowLayout()); 
setVisible(true); 
setSize(178,190); 
setDefaultCloseOperation(EXIT_ON_CLOSE); 

nameLabel = new JLabel("User ID: "); 
add(nameLabel); 

nameText = new JTextField(10); 
add(nameText); 

passwordLabel = new JLabel("Password: "); 
add(passwordLabel); 

passwordField = new JPasswordField(10); 
add(passwordField); 

submitButton = new JButton("Submit"); 
add(submitButton); 

ButtonHandler handler = new ButtonHandler(); 
submitButton.addActionListener(handler); 
} 

private class ButtonHandler implements ActionListener{ 

public void actionPerformed(ActionEvent e){ 

String user = nameText.getText(); 
String pass = passwordField.getText(); 
try{ 
Jdbc test = new Jdbc(); 
conn = test.dbConn(); 
String query = "SELECT employee_ID,employee_password FROM user where ='"+user+"'"; 

}catch(Exception eee){ 
eee.printStackTrace(); 
} 
} 
} 
} 
+0

これはあなたを助けるかもしれない:http://docs.oracle.com/javase/tutorial/uiswing/components/passwordfield.html –

答えて

5

代わりgetText()方法の使用getPassword()

注目すべき点の1つは、ハードコードされたSQL文を使用しないことです。 PreparedStatementを使用すると、SQLインジェクションを防ぐために文字列をエスケープします。

+0

あなたはなぜ 'gettextの()'文句を言わない作業を説明してくださいできますか? (passwordfieldもtextcomponentですが) – COD3BOY

+0

私のコードでこれを行う方法を教えてください。特にログイン? – user962206

+0

@Sanjay - もちろんgetText()はJPasswordFieldでは動作しますが、APIを見てください。セキュリティ上の理由から、このメソッドは推奨されていません。代わりに* getPasswordメソッドを使用してください。 (http://docs.oracle.com/javase/7/docs/api/javax/swing/JPasswordField.html#getText()) – adatapost

2
char[] p = passField.getPassword(); 
String password = new String(p); 

私はあなたのPreparedStatement

PreparedStatement prepstmt = con 
     .prepareStatement("SELECT employee_ID,employee_password FROM user where username = ? AND Password = ? "); 
    prepstmt.setString(1, user); 
    prepstmt.setString(2, password); 


    ResultSet rs; 
    rs = prepstmt.executeQuery(); 

    boolean found = rs.next(); 
    if (found) 
     System.out.println(rs.getString(1)); 
    prepstmt.close(); 

    } 
0

SwingのJPasswordFieldのは、char配列を返しgetPasswordに()メソッドを持って使うべきだと思います。

String passText = new String(passField.getPassword()); 
+0

以前の回答と比較して新しいものはありません;-) – kleopatra