0

私は従業員のログイン検証クラスを作成しています。そこでは、情報をmysqlデータベースに挿入できます。検証のために、行のパスワードのみを選択しようとしています。ここに私のコードがあります:

     import java.sql.*;
        import java.sql.PreparedStatement;
        import java.sql.Connection;


    public class Employee 
    {

    private PreparedStatement statement;
    private Connection con;
    private String pass;
    public Employee()
    {   

    }
    public Employee(String firstName, String lastName, String userID, String userPassword, String role )
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
            statement = con.prepareStatement("Insert into employee(firstName, lastName, userID, " +
                    "password, role)values(?, ?, ?, ?, ?)");    

            statement.setString(1, firstName);
            statement.setString(2, lastName);
            statement.setString(3, userID);
            statement.setString(4, userPassword);
            statement.setString(5, role);
            statement.executeUpdate();
            con.close(); 
        }
        catch(Exception e)
        {

        }
    }
    public void setPassword(String userID)
    {
        try
        {
            statement = con.prepareStatement("SELECT * from employee WHERE userID = ?");
            statement.setString(1, userID);
            ResultSet rs = statement.executeQuery();
            while(rs.next()){
                pass = rs.getString(4);
            }
        }
        catch(Exception e)
        {
            System.out.print(e);
        }
    }
    public String getPassword()
    {
        return pass;
    }


    }
and here is my main

        public class TestMain 
        {
        public static void main(String argsp[])
    {
        Employee emp = new Employee();
        emp.setPassword("ecka12");  
    }
    }

ヌル ポインター例外が発生しました。理由はわかりません。

4

3 に答える 3

1

次を使用してオブジェクトを作成しています:-

   Employee emp = new Employee();

0引数のコンストラクターで、初期化されていませんconnection

public Employee() {

}

したがって、メソッドで使用すると、次のようになりますcon:-setPassword()NullPointerException

    // con is not initialized
    statement = con.prepareStatement("SELECT * from employee WHERE userID = ?");
    statement.setString(1, userID);

これを修正0-arg constructorするには、以下のコードを..に移動する必要があります。また、他のコンストラクターで:-最初のステートメントとして追加this()します。

public Employee() {
    try {
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/test","root","");
    } catch (Exception e) {
         e.printStackTrace();
    }
}



public Employee(String firstName, String lastName) {
     this(); // Initialize con..

     try {
        // You don't need to initialize your con here again..
        // Your remaining code.. 
     }
}
于 2012-10-05T12:55:46.940 に答える
0

追加のコンストラクター public Employee() があるため、null ポインター例外が発生します。con は初期化されていないため、null ポインター例外が発生します。

幸運を!

于 2012-10-05T12:59:04.240 に答える
0

1. employee tableJava コードでテーブルを作成していないため、コードを実行する前に が作成されていることを確認してください。

2.Employee(String,,,,)コンストラクターも使用していません。この接続がインスタンス化されなかったため、コンストラクター自体で接続を閉じました。テーブル内のデータを検索する前に存在する可能性があります。

于 2012-10-05T13:23:21.257 に答える