0

mySQL データベースへの接続を正常に確立するコードがあります。

    String email, password; //assume these are already loaded with user-entered data.

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        return false;
    }
    
    Connection conn = null;
    
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/main", "root", "password123");
    } catch (SQLException e) {
        return false;
    }
    
    //perform my database actions here///////////////
    
    ///////////////////////////////////////////////////
    
    try {
        conn.close();
    } catch (SQLException e) {
        return false;
    }

上記のコードの範囲内に、ログイン ページでユーザーが入力したメール アドレスとパスワードが既に含まれている文字列がいくつかあります。データベースを調べて一致する電子メール アドレスを探し、パスワードがユーザーがフォームに入力したものと一致することを確認する必要があります。

私のテーブルには、id、email、および password の 3 つの列があります。

SQLワークベンチを使用して2行をテーブルにプッシュしました

1 | email@gmail.com | パスワード1

2 | email2@gmail.com | パスワード2

私は純粋なSQLで次のようなことをしなければならないと仮定しています

SELECT * FROM users WHERE email LIKE 'email@gmail.com' AND password LIKE 'password1';

しかし、実際にこれらの SQL コマンドをデータベースに送信し、JSP を使用して情報を受け取る方法がよくわかりません。また、私の SQL ロジックがパスワードを検証する理想的な方法であるかどうかも完全にはわかりません。上記の SQL コマンドに関する私の考えでは、データベースが条件を満たす行を見つけた場合、電子メールとパスワードの組み合わせが検証されます。ただし、これが優れた方法であるかどうかはわかりません。私は最も安全で複雑な方法を探しているわけではありません。現時点で最も簡単な方法を探しているだけです。私が見つけたすべてのチュートリアルは、それを異なる方法で行っているようで、少し混乱しています。

4

1 に答える 1

0

これは、私が取り組んだことから使用できる例です(接続「conn」は明らかであると想定しています):

    PreparedStatement st = null;
    ResultSet rec = null;

    SprayJobItem item = null;

    try {

        st = conn.prepareStatement("select * from sprayjob where headerref=? and jobname=?");
        st.setString(1, request.getParameter("joblistref"));
        st.setString(2, request.getParameter("jobname"));

        rec = st.executeQuery();
        if (rec.next()) {
            item = new SprayJobItem(rec);
        }

    } catch (SQLException ex) {
        // handle any errors
        ReportError.errorReport("SQLException: " + ex.getMessage());
        ReportError.errorReport("SQLState: " + ex.getSQLState());
        ReportError.errorReport("VendorError: " + ex.getErrorCode());

    } catch (Exception ex) {
        ReportError.errorReport("Error: " + ex.getMessage());
    } finally {
        // Always make sure result sets and statements are closed,
        if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) {
            ;
        }
        ps = null;
    }
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            ;
        }
        rs = null;
    }
    }

あなたの場合、代わりにitem = new SprayJobItem(rec); 、レコードが見つかったときにユーザーが有効であることを示すコードがあります。

于 2015-07-08T15:49:10.633 に答える