【问题标题】:Not able to printout string variable from trycatch block on servlet http response无法从 servlet http 响应的 try catch 块中打印出字符串变量
【发布时间】:2014-12-09 07:12:43
【问题描述】:

我是 J2EE 应用程序的新手,并尝试在通过学生 ID 搜索后显示数据库中的记录,这也是我的主键。 jdbc/studentDB 是我的 JNDI 名称。
studentdao.java 中的我的语法@Resource(name="jdbc/studentDB") 是否足以连接?如果是,是方法 executeFetchQuery(int 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

【问题讨论】:

    标签: jakarta-ee jdbc ejb


    【解决方案1】:

    以下总是会导致异常,因为您在 rs.next() 之前调用 rs.getString()

    尝试{ fName = rs.getString("名字"); 而(rs.next()){ fName = rs.getString("名字"); } } 删除第一个`fName = rs.getString("firstname");` try 块会像 尝试{ 而(rs.next()){ fName = rs.getString("名字"); } }

    更新

    StudentDao.executeFetchQuery(int) 中,您返回的是ResultSet,但用于获取ResultSetConnection 已关闭,因此ResultSet 也将关闭。

    这不是正确的做法。从StudentDao.executeFetchQuery(int) 返回firstname,应该是这样。

    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

    String fname = studentDao.executeFetchQuery(v);
    

    【讨论】:

    • ,嗨,我尝试删除 [fName = rs.getString("firstname");],但输出仍然保持不变。是 studentdao.java 中的 ResultSet executeFetchQuery(int id) 方法中的问题吗.search.java(servlet) 中的变量 fName 正确地从 try catch 块中传递出来。ryt??请帮忙
    • fName: null,(为什么通过tryCatch块后值没有被改变)
    • 检查是否有异常
    猜你喜欢
    • 1970-01-01
    • 2017-11-15
    • 2015-07-07
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多