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