2

GUI プログラム、単純な LOGIN メンテナンスを作成しようとしています。jlabel、jtextfield、jpasswordfield、jbutton の 4 つの GUI コンポーネントがあります。これまでのところ、これは私のコードです:

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.*;


public class BankGui extends JApplet implements ActionListener{

// GUI components
JLabel lblUser, lblPass;
JTextField txtUser;
JPasswordField txtPass;
JButton btnOk, btnClear;

// connections to MYSQL
private static Connection connection = null;
private static Statement statement = null;
private static ResultSet resultSet = null;
//public static Scanner in = new Scanner(System.in);

public void init(){
    Container c = getContentPane();
    c.setLayout( new FlowLayout() );

    lblUser = new JLabel( "Username: " );
    c.add( lblUser );
    txtUser = new JTextField( 10 );
    c.add( txtUser );

    lblPass = new JLabel( "Password:" );
    c.add( lblPass );
    txtPass = new JPasswordField( 10 );
    c.add( txtPass );

    btnOk = new JButton( "OK" );
    btnOk.addActionListener( this );
    c.add( btnOk );
}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if( btnOk ){

    }
}

public void connect(){

    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/USERS", "root", "root");
        statement = connection.createStatement();
        resultSet = statement
                .executeQuery("SELECT lname, fname FROM employees");

    } catch (Exception e) {
        e.printStackTrace();
    }

}


}

しかし、メソッド actionperformed と connect メソッドに行き詰まっています。ログインした人が許可されたユーザーであるかどうかを検証するためにそこに何を入れればよいかわかりません。

4

2 に答える 2

2

Javaアプリケーション( Frame/JFrameを拡張)に変更してくださいでSQL操作ができませ。この記事 -アプレットでできることとできないこと を読んでくださいApplet

SELECTWHERE 句を使用してステートメントを作成する必要があります。

String sql="SELECT userName FROM employees WHERE UserName=? and Password=?";

編集:

staticブロックにJDBCドライバーを登録する

 static {
   try{
       Class.forName("com.mysql.jdbc.Driver");
   }catch(Exception ex) { 
       System.err.println(ex);
   }
 }

actionPerformedメソッドにコードを記述します。

PreparedStatement stmt=null;
boolean isFound=false;
try{
   connection = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/USERS", "root", "root");
   String sql="SELECT userName FROM employees WHERE UserName=? and Password=?";
   stmt=connection.prepareStatement(sql);
   stmt.setString(1,txtUser.getText());
   stmt.setString(2,txtPass.getPassword());             
   resultSet=stmt.executeQuery();
   if(resultSet.next()){
     isFound=true;
   }
  //     
}catch(SQLException ex){
   System.err.println(ex);
}finally{
  if(stmt!=null){
      try{ 
         stmt.close();
      }catch(Exception ex) { /* */ }
  }
 if(connection!=null){
      try{ 
         connection.close();
      }catch(Exception ex) { /* */ }
  }
}
于 2012-07-12T06:29:51.500 に答える
0

コードをこれに変更します

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            if (e.getActionCommand().equals("OK")){
                     if(connect(txtUser.getText(), txtPass.getText())) {
                                // Valid
                     }
                     else {
                           //Invalid
                     }

            }
        }

        public boolean connect(String usr, String pwd){

            try {
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/USERS", "root", "root");
                 PreparedStatement ps= connection.prepareStatement("SELECT lname, fname FROM employees where username=? and password =?");
                 ps.setString(1,usr);
                 ps.setString(2,pwd);

                resultSet = ps.executeQuery();

              if(resultSet.next()) {
                       return true;
              }

            } catch (Exception e) {
                e.printStackTrace();
            }

    return false;
        }
于 2012-07-12T06:35:28.127 に答える