netbeans8中的Javaservlet不使用数据库驱动程序ucanaccess和数据库ms访问来读取sql字符串



我将netbeans8与jdk7一起使用。我使用db-ms访问,连接的驱动程序是UCNACCESS。我正在开发javaservlet。现在我有2个servlet和2个类。第一个Servlet(searchperson)是从用户获取输入的表示层,第二个Servlet(showperson)获取输入并传递到数据库类(persondao)以从ms-accessdb中搜索人员,我的第二个类(personinfo)获取搜索到的参数并从第二个Servlet向用户显示。我的servlet和calss名称分别是:1)Saerchpersonservlet,2)showpersonservlet,3)personDAO类,4)Personinfo类。下面是代码。问题是光标指向db类(persondao),但没有读取db-sql字符串。

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SearchPerson extends HttpServlet {
/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
        /* TODO output your page here. You may use following sample code. */
        out.println("<!DOCTYPE html>"+
        "<html>"+
        "<head>"+
        "<title>Servlet SearchPerson</title>"+
        "</head>"+
        "<body>"+
            "<form action=http://localhost:8084/projectapp/showpersonservlet > "+
                "<h1> Please enter the name to search </h1>"+
            "<input type=text name=pname> <br>"+
             "<input type=submit value=searchperson> <br>"+
              "</form>"+
        //out.println("<h1>Servlet SearchPerson at " + request.getContextPath() + "</h1>");
        "</body>"+
        "</html>"
        );
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}
/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}
/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

//showpersonservlet

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class showpersonservlet extends HttpServlet {
/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.println("usman");
    String sName=request.getParameter("pname");
        out.println(sName);
        PersonDAO psName=new PersonDAO();
        PersonInfo pInfo=psName.searchPerson("USMAN");

        if (pInfo!=null) {
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet showpersonservlet</title>");            
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet showpersonservlet at " + pInfo.toString() +   "</h1>");
        out.println("</body>");
        out.println("</html>");
        }
        else{
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet showpersonservlet</title>");            
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>   No result found  </h1>");
        out.println("</body>");
        out.println("</html>");
        }


}// end process request 
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}
/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}
/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

//PERSONINFO类

public class PersonInfo {
    private String sName;
private String address;
private String phone;
public PersonInfo(String sName,String address,String phone){
    setName(sName);
    setAdress(address);
    setPhone(phone);
}
public void setName(String sName){
    this.sName=sName;
}
public String getName(){
    return(sName);
}
public void setAdress(String address){
    this.address=address;
}
public String getAdress(){
    return(address);
}
public void setPhone(String phone){
    this.phone=phone;
}
public String getPhone(){
    return(phone);
}
public String toString(){
    return " Name: "+getName()+" Address: "+getAdress()+" Phone: "+ getPhone(); 
}    
}// end of class person info

//PersonDAO类数据库调用

import java.sql.*;
public class PersonDAO {

public PersonInfo searchPerson(String sName){
    PersonInfo person=null;
    Connection con=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;
    try{
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        String url="jdbc:ucanaccess://E:/java/personinfo.accdb";
        con=DriverManager.getConnection(url);
        String sql= "select * from emp where name=?";
        pstmt=con.prepareStatement(sql,ResultSet.CONCUR_READ_ONLY,ResultSet.CONCUR_UPDATABLE);
        pstmt.setString(1, sName);
         rs=pstmt.executeQuery();
        while(rs.next()){
            String name=rs.getString("NAME");
            String adress=rs.getString("ADDRESS");
            String phoneno=rs.getString("PHONENO");
            person=new PersonInfo(name,adress,phoneno);
        }// end of rs net
    } catch(Exception ex){System.out.println(ex+"  Error at db level  ");}
    finally{
    if(con!=null){
        try{
        con.close();
        }catch(Exception ec){}  
    }
    if(pstmt!=null){
        try{
        pstmt.close();
        }catch(Exception ec){}  
    }
    if(rs!=null){
        try{
            rs.close();
        }catch(Exception ec){}
    }
}// end of  FINALLY catch exception
    return person;
    }// end of search person
/*
public static void main(String[] args) {
    // TODO Auto-generated method stub
    PersonDAO perProj= new PersonDAO();
            PersonInfo per=perProj.searchPerson("USMAN");
            System.out.println(per.toString());
}
*/
}// end of class person dao

它看起来像一个死锁。这是由于您对可更新结果集的使用不当。

更换

pstmt=con.prepareStatement(sql,ResultSet.CONCUR_READ_ONLY,ResultSet.CONCUR_UPDATABLE);

带有

pstmt=con.prepareStatement(sql);

也许可以解决这个问题。

最新更新