为什么我的数据库仅在前两次 jsp 表单提交时成功更新?
Why does my database only update successfully on first two jsp form submissions?
好的,所以我有一个 jsp,它具有输入框,用户可以在其中插入整数。我的 Java servlet class 然后获取这些整数,将它们添加到当前在数据库中的相应值,然后将总数除以 formSubmissionCount 以获得平均值。同一个用户第一次和第二次提交统计数据时一切正常,但第三次(以及此后的每次)统计数据都没有计算出正确的数字(提交给数据库的新值每次都只是减少)。我不确定为什么会这样,这是我在 doPost():
中的逻辑
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1. GET SUBMITTED JSP FORM VALUES
String roundScore = req.getParameter("score_avg").toString();
double roundScoreDouble = Double.parseDouble(roundScore);
String roundPutts = req.getParameter("putts").toString();
double puttsDouble = Double.parseDouble(roundPutts);*/
// 2. GET LOGGED IN USER DETAILS
Session session = HibernateUtil.createSessionFactory().openSession();
session.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(session);
session.beginTransaction();
Criteria criteria = session.createCriteria(UserBean.class);
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
String userLoggedIn = authentication.getName();
List<UserBean> retrievedUser = criteria.add(
Restrictions.like("username", userLoggedIn)).list();
// 3. CREATE NEW UPDATED VALUES
for (UserBean string : retrievedUser) {
double calculateSubmitCount = string.getSubmitCount() + 1;
double addRoundScoreValues = roundScoreDouble
+ string.getScore_avg();
double newRoundScore = addRoundScoreValues / calculateSubmitCount;
double truncatedRoundScore = new BigDecimal(newRoundScore)
.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
string.setScore_avg(truncatedRoundScore);
double addPuttsValues = puttsDouble + string.getPutts();
double newPuttsTotal = addPuttsValues / calculateSubmitCount;
double truncatedPutts = new BigDecimal(newPuttsTotal)
.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
string.setPutts(truncatedPutts);
string.setSubmitCount(string.getSubmitCount() + 1);
ManagedSessionContext.unbind(HibernateUtil.createSessionFactory());
session.flush();
session.getTransaction().commit();
}
if (session.getTransaction().wasRolledBack()) {
req.getRequestDispatcher("/WEB-INF/jsps/error.jsp").forward(req,
resp);
} else {
session.close();
req.getRequestDispatcher("/WEB-INF/jsps/analysisoutcome.jsp")
.forward(req, resp);
}
}
问题出在我的逻辑上,而不是数据类型上。我需要将数据库中的当前平均分数乘以当前提交计数值,然后将此值与用户输入的新值相加,最后将此总和除以提交计数加一的值。
好的,所以我有一个 jsp,它具有输入框,用户可以在其中插入整数。我的 Java servlet class 然后获取这些整数,将它们添加到当前在数据库中的相应值,然后将总数除以 formSubmissionCount 以获得平均值。同一个用户第一次和第二次提交统计数据时一切正常,但第三次(以及此后的每次)统计数据都没有计算出正确的数字(提交给数据库的新值每次都只是减少)。我不确定为什么会这样,这是我在 doPost():
中的逻辑@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1. GET SUBMITTED JSP FORM VALUES
String roundScore = req.getParameter("score_avg").toString();
double roundScoreDouble = Double.parseDouble(roundScore);
String roundPutts = req.getParameter("putts").toString();
double puttsDouble = Double.parseDouble(roundPutts);*/
// 2. GET LOGGED IN USER DETAILS
Session session = HibernateUtil.createSessionFactory().openSession();
session.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(session);
session.beginTransaction();
Criteria criteria = session.createCriteria(UserBean.class);
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
String userLoggedIn = authentication.getName();
List<UserBean> retrievedUser = criteria.add(
Restrictions.like("username", userLoggedIn)).list();
// 3. CREATE NEW UPDATED VALUES
for (UserBean string : retrievedUser) {
double calculateSubmitCount = string.getSubmitCount() + 1;
double addRoundScoreValues = roundScoreDouble
+ string.getScore_avg();
double newRoundScore = addRoundScoreValues / calculateSubmitCount;
double truncatedRoundScore = new BigDecimal(newRoundScore)
.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
string.setScore_avg(truncatedRoundScore);
double addPuttsValues = puttsDouble + string.getPutts();
double newPuttsTotal = addPuttsValues / calculateSubmitCount;
double truncatedPutts = new BigDecimal(newPuttsTotal)
.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
string.setPutts(truncatedPutts);
string.setSubmitCount(string.getSubmitCount() + 1);
ManagedSessionContext.unbind(HibernateUtil.createSessionFactory());
session.flush();
session.getTransaction().commit();
}
if (session.getTransaction().wasRolledBack()) {
req.getRequestDispatcher("/WEB-INF/jsps/error.jsp").forward(req,
resp);
} else {
session.close();
req.getRequestDispatcher("/WEB-INF/jsps/analysisoutcome.jsp")
.forward(req, resp);
}
}
问题出在我的逻辑上,而不是数据类型上。我需要将数据库中的当前平均分数乘以当前提交计数值,然后将此值与用户输入的新值相加,最后将此总和除以提交计数加一的值。