2

ログイン/パスワードを検証するためにサーブレットを使用する必要があります。それはもういいです。

DAO クラスに、prepareStatement を介して値の resultSet リストを返すメソッドがあります。

このフィルター処理された結果を where 句 (ユーザーの名前) で取得するクエリを使用しています。

問題は、サーブレット パラメータ (ログインしたユーザーの名前) を取得し、それを prepareStatement に設定するにはどうすればよいかということです。

コードは次のとおりです。

public class DaoPojoJoin extends Dao {

public List<PojoJoin> listUserDegrees() {
    List<PojoJoin> dg = new ArrayList<PojoJoin>();
    if (openConnection()) {
        try {
            st = cn.prepareStatement("SELECT USER, MATTER, DEGREE FROM DEGREES x "
                    + "right outer join USERS y on x.idUser=y.idUser "
                    + "right outer join MATTER z on idMatter=z.idMatter "
                    + "where x.iduser=?"); // filter result by user's name

            // How can I have something like this:
            // st.setString(1,usr.request.getParameter("user"));

            // or this:
            // st.setString(1,.getAttribute(user));

            rs = st.executeQuery();
            while (rs.next()) {
                PojoJoin pj = new PojoJoin();
                rs.getString("USER"); 
                rs.getString("MATTER");
                rs.getDouble("DEGREE");
                pj.setUsuario(rs.getString("USER"));
                pj.setDisciplina(rs.getString("MATTER"));
                pj.setNota(rs.getDouble("DEGREE"));
                nota.add(pj);
            }
        } catch (Exception ex) {
            err = ex.getMessage();
        } finally {
            closeConnection();
        }
    }
    return dg;
}

}

前もって感謝します。

4

1 に答える 1

0

メソッド引数としてそれを求めます。DAOは、それが置かれているコンテキストを気にする必要はなく、他の場所で再利用可能であると想定されています(たとえば、サーブレットを使用しないプレーンなバニラJavaアプリケーション)。

したがって、そう

public List<PojoJoin> listUserDegrees(String username) {
    // ...
}

また

public List<PojoJoin> listUserDegrees(Long userId) {
    // ...
}

また

public List<PojoJoin> listUserDegrees(User user) {
    // ...
}

最後に、呼び出し元(サーブレット)に渡してもらいます。


具体的な問題とは関係なく、DBリソースの処理はスレッドセーフではないようです。あなたのウェブアプリが複数のユーザーによって使用され始めるときはいつでも深刻な問題を避けるために私はそれに取り組んでいます。

于 2012-05-28T00:05:59.017 に答える