我尝试在SQLServer中从我的数据库中调用过程,当我想使用query按用户名返回用户时,我使用这个方法
@Override
public UserApp getUserByLogin(String username) {
Session session = this.sessionFactory.openSession();
UserApp userApp =
(UserApp) session.createQuery("FROM pl.edu.wszib.model.UserApp WHERE username = :username" )
.setParameter("username", username)
.uniqueResult();
session.close();
System.out.println(userApp);
return userApp;
}
在我的控制器中,我使用这个方法
@RequestMapping("/userApp")
public String user(Model model, UserApp userApp, BindingResult bindingResult){
if(this.sessionObject.getUserApp() == null){
return "redirect:login";
}
if(bindingResult.hasErrors()) {
return "userApp"; // powrót do formularza
}
UserApp result = userDAO.getUserByLogin(userApp.getUsername());
model.addAttribute("result", result);
return "resultUser";
}
@GetMapping("/userApp")
public String userForm(UserApp userApp) {
return "userApp";
}
我使用的表单是:object userapp
<form action="/userApp" th:object="${userApp}" method="post" id="login" class="input-group">
<input type="text" class="input-field" placeholder="username" name="username" th:field="*{username}" th:errorClass="error"required>
<span th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Incorrect data</span>
<button type="submit" class="submit-btn">Get your profil</button>
</form>
我可以在页面上看到我的结果这个方法从我的userapp类返回所有字段当我想调用过程这个过程是测试过程来学习如何调用过程和做同样的事情,但是通过id从类userapp返回所有字段iduser我的方法是
@Override
public UserApp getUserByIdProcedure(int idUser){
Session session = this.sessionFactory.openSession();
Object query =
session.createSQLQuery("EXECUTE p_Users :idUser")
.setParameter("idUser",idUser)
.uniqueResult();
session.close();
System.out.println(query);
return (UserApp) query;
}
我将此方法转换为方法,该方法通过userapp类中的用户名返回所有字段。我的控制器是对的
@RequestMapping("/getUserProcedure")
public String getUserProcedure(Model model, UserApp userApp, BindingResult bindingResult){
if(this.sessionObject.getUserApp() == null){
return "redirect:login";
}
if(bindingResult.hasErrors()) {
return "getUserProcedure"; // powrót do formularza
}
UserApp result = userDAO.getUserByIdProcedure(userApp.getIdUser());
model.addAttribute("result", result);
return "resultGetUserProcedure";
}
@GetMapping("/getUserProcedure")
public String getUserFormProcedure(UserApp userApp) {
if(this.sessionObject.getUserApp() == null){
return "redirect:login";
}
return "getUserProcedure";
}
我想在我的主页上看到这样的结果
<form action="/getUserProcedure" th:object="${userApp}"method="post" id="login" class="input-group">
<input type="text" class="input-field" placeholder="idUser" name="idUser" th:field="*{idUser}" th:errorClass="error"required>
<span th:if="${#fields.hasErrors('idUser')}" th:errors="*{idUser}">Incorrect data</span>
<button type="submit" class="submit-btn">Get User</button>
</form>
在监护室呼叫程序是
Query query = session.createSQLQuery("EXECUTE p_Users :idUser")
.setParameter("idUser",idUser);
所以我要看看结果 .uniqueResult();
就像在我的方法中,通过username返回userapp类的所有字段,通过cast将error cant转换为我尝试使用的类 .executeUpdate()
但是我得到了错误com.microsoft.sqlserver.jdbc.sqlserverexception:为更新生成了一个结果集。当我试图强制转换为查询时,我在页面上看不到我的输出,因为thymeleaf无法理解我的结果。iduser my or maybe i must cast to objset becaouse query return a table object[]sameone能否解释如何从过程中获取结果我必须更改什么才能从该过程中获得结果?
暂无答案!
目前还没有任何答案,快来回答吧!