Jakarta ee 无法在servlet http响应上从trycatch块打印字符串变量

Jakarta ee 无法在servlet http响应上从trycatch块打印字符串变量,jakarta-ee,jdbc,ejb,Jakarta Ee,Jdbc,Ejb,我是J2EE应用程序的新手,尝试通过学生id(也是我的主键)搜索数据库后显示数据库中的记录。jdbc/studentDB是我的JNDI名称。 studentdao.java中的语法@Resourcename=jdbc/studentDB是否足以连接?如果是,方法executeFetchQueryint id是否存在问题? 我哪里出了问题,请帮忙 //search.java(servlet) ResultSet rs = ***studentDao.executeFetchQue

我是J2EE应用程序的新手,尝试通过学生id(也是我的主键)搜索数据库后显示数据库中的记录。jdbc/studentDB是我的JNDI名称。 studentdao.java中的语法@Resourcename=jdbc/studentDB是否足以连接?如果是,方法executeFetchQueryint id是否存在问题? 我哪里出了问题,请帮忙

    //search.java(servlet)

    ResultSet rs = ***studentDao.executeFetchQuery(v);***
    String fName = null; 
    try{
          fName = rs.getString("firstname");
        while(rs.next()){ 

    fName = rs.getString("firstname");


    }
    }catch (Exception ex){
      System.out.println("error: "+ex);
            }

        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet getdata</title>");            
        out.println("</head>");
        out.println("<body>");
        out.println("fname: "+ fName);
        out.println("</body>");
        out.println("</html>");
//studentdao.java

 //required imports
 @Stateless
 public class StudentDao implements StudentDaoLocal {
 @Resource(name="jdbc/studentDB")
 private DataSource datasource;


@PersistenceContext
private EntityManager em;

@Override
public void addStudent(Student student) {
    em.persist(student);
}

@Override
public void editStudent(Student student) {
    em.merge(student);
}

@Override
public void deleteStudent(int studentId) {
    em.remove(getStudent(studentId));
}

@Override
public Student getStudent(int studentId) {
    return em.find(Student.class, studentId);
}

@Override
public List<Student> getAllStudents() {
    return em.createNamedQuery("Student.getAll").getResultList();
}

/**
 *
 * @param id
 * @return
 */
@Override
***public  ResultSet executeFetchQuery(int id){***
    ResultSet rs = null;
    try{ 
       Connection conn = datasource.getConnection();
       String sql = "SELECT * FROM STUDENT WHERE STUDENTID = '" + id +"'";
       rs = conn.createStatement().executeQuery(sql);
       conn.close();
   } catch (Exception e) {
       System.err.println(e.getMessage());
   }
  return rs;
  }
//数据库中id的输出

fname:null

以下内容始终会导致异常,因为您在rs.next之前调用rs.getString

试一试{ fName=rs.getStringfirstname; whilers.下一个{ fName=rs.getStringfirstname; } } 删除第一个`fName=rs.getStringfirstname;`try块将如下所示 试一试{ whilers.下一个{ fName=rs.getStringfirstname; } } 更新

在StudentDao.executeFetchQueryint中,您正在返回一个结果集,但用于获取结果集的连接已关闭,因此结果集也将关闭

这不是正确的做法。从StudentDao.executeFetchQueryint返回名字,因此它应该是

public String executeFetchQuery(int id){
  String firstname = null;
  try{ 
    Connection conn = datasource.getConnection();
    String sql = "SELECT * FROM STUDENT WHERE STUDENTID = '" + id +"'";
    rs = conn.createStatement().executeQuery(sql);
    if(rs.next()){
      firstName = rs.getString("firstname");
    }
    conn.close();
  }catch (Exception e) {
    System.err.println(e.getMessage());
  }
  return firstname;
}
和在search.java中


,您好,我尝试删除[fName=rs.getStringfirstname;],但输出仍然保持不变。studentdao.java中ResultSet executeFetchQueryint id方法中是否存在问题。search.javaservlet中的变量fName已正确地从try-catch块中传递出去。ryt??请帮助fName:null,为什么经过tryCatch blockCheck后该值没有更改?是否存在任何异常
String fname = studentDao.executeFetchQuery(v);