Сервлет не показывает все результаты совпадения при объединении двух таблиц - PullRequest
0 голосов
/ 30 мая 2020

У меня есть поле в JSP <c:param name="names" value="${tempstudent.name}"/> для отображения имени пользователя, и мой сервлет берет это поле String names=request.getParameter("names") и отправляет его классу student_db_util в методе с именем public List <studentrgister> showcourse(String names) в качестве параметра, который имеет задача взять имена и использовать их в моем запросе sql, чтобы показать результат совпадения из 2 таблиц (таблица mytest, которая имеет столбец firstName, lastName, id и таблицу классов, у которой есть столбец id, class). проблема для этого приложения заключается в том, что в обеих таблицах есть более одного результата совпадения, когда я присоединяюсь к обеим таблицам, но мое приложение отображается только в результате совпадения на моей JSP странице

<body>
<table>
<form action="studentregister" method="get">

                        <input type="hidden" name ="comand" value="seecourse"/> 


<c:forEach var="tempstudent" items="${mycourse}">
                                                <td >${tempstudent.name}</td>
</c:forEach>
</form>
</table>

jsp странице, которая поле имен находится

<form action="studentregister" method="get">
                        <input type="hidden" name="command" value="pass" />
<table>
<c:forEach var="tempstudent" items="${studentlist}">
<c:url var="seecourse" value="studentregister">
            <c:param name="command" value="seecourse"/>
            <c:param name="names" value="${tempstudent.name}"/>
            </c:url>
                        <td >${tempstudent.email}</td>
                                                <td >${tempstudent.name}</td>
                                                <a href="${seecourse}"
                        >
                        seecourse</a>   

</c:forEach>
</table>
</form>

метод сервлета

    private void seecourse(HttpServletRequest request, HttpServletResponse response) throws Exception {

        String names=request.getParameter("names");
        student_db_util.showcourse(names);
        List<studentrgister> student=student_db_util.showcourse(names);
        request.setAttribute("mycourse", student);
        RequestDispatcher rd=request.getRequestDispatcher("/showcourse.jsp");  
        rd.forward(request,response);   
    }

метод в классе student_db_util

public List <studentrgister> showcourse(String names) throws Exception {
        List<studentrgister> students = new ArrayList<>();
         String connectionURL = "jdbc:mysql://localhost:3306/web_student_tracker";
          System.out.println("loding the driver");
          Statement s=null;


        studentrgister mystudent=null;
        Connection myConn = null;
        myConn= DriverManager.getConnection(connectionURL, "webstudent", "webstudent"); 
      System.out.println("username and password is correect");

        PreparedStatement myStmt=null;
        ResultSet myRs = null;
        String  name=names;
try {
      Class.forName("com.mysql.jdbc.Driver");
          System.out.println("driver is loaded");
    //myConn = dataSource.getConnection();
        String sql = "SELECT mytest.firstName,class.name FROM mytest "
                 + "INNER JOIN class ON mytest.id=class.id "
                 + "where mytest.firstName = ? " ;
                PreparedStatement ps = myConn.prepareStatement(sql);
                ps.setString(1,name); 
    myRs=ps.executeQuery();
    if (myRs.next()) {
        String classname = myRs.getString("name");
        //String numbername=myRs.getString("firstName");
        mystudent = new studentrgister(classname);
        students.add(mystudent);
        }
        else {
            throw new Exception("Could not find student id: " );
        }           




        return students;
}
        finally {
            close(myConn,myStmt,null);

        }

    }

1 Ответ

0 голосов
/ 30 мая 2020

Это объявление списка находится внутри метода, но метод возвращает переменную, я предполагаю, что переменная студентов должна находиться за пределами метода в доступной области, которая будет использоваться. Вы должны объявить список глобально в классе, чтобы к нему можно было получить доступ за пределами метода, или если у вас есть другая переменная школьников за пределами, к которой можно вернуться, не может возвращать переменную с локальной областью действия, объявленную в методе.

List<studentrgister> students = new ArrayList<>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...