我需要使用servlet来验证登录名/密码。那已经很好了。
我在DAO类中有一个方法,它通过prepareStatement返回一个resultSet值列表。
我正在使用一个查询,该过滤结果带有where子句(按用户名)。
问题是:如何获取servlet参数(登录用户的名称)并在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;
}
}
提前致谢。
答案 0 :(得分:0)
要求它作为方法参数。 DAO不应该关心它所处的上下文,并且应该可以在其他地方重用(例如,不使用servlet的普通Java应用程序)。
如此
public List<PojoJoin> listUserDegrees(String username) {
// ...
}
或
public List<PojoJoin> listUserDegrees(Long userId) {
// ...
}
或
public List<PojoJoin> listUserDegrees(User user) {
// ...
}
最后让调用者(servlet)将其传入。
无关,您的数据库资源处理似乎不是线程安全的。我会努力避免每当您的webapp开始被多个用户使用时出现严重问题。