我将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);
也许可以解决这个问题。