2012-04-22 3 views
-1

名前または姓で検索すると何も返されません。生年月日が指定されている場合にのみ値を返します。別の質問は、生年月日が空白のまま残っている場合です。 "birthyear"列のnull値がnullでない制約に違反しています。Java Servletを使用したPostgreSQLからの検索。表示する結果が得られません

import java.util.*; 
    import java.sql.*; 
    import java.io.*; 

    import javax.servlet.RequestDispatcher; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    /** 
    * Servlet implementation class searchfromdatabase 
    */ 
    public class searchfromdatabase extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     /** 
     * @see HttpServlet#HttpServlet() 
     */ 
     public searchfromdatabase() { 
      super(); 
      // TODO Auto-generated constructor stub 
     } 

     /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
     */ 
     protected void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
      System.out.println("command: " + request.getParameter("command")); 
      response.setContentType("text/html"); 
      java.io.PrintWriter out = response.getWriter(); 
      out.println("<html><head>"); 
      out.println("<title>Search form</title></head><body>"); 
      out.println("<h2>Artist details.</h2><tr>"); 

      // HTMl Customer Input 
      out.println("<form method=\"post\" action =\"" 
        + request.getContextPath() + "/searchfromdatabase\" >"); 

      out.println("<table border='0' width='300' align='center' bgcolor='#CDFFFF'>"); 
      out.println("<tr><td colspan=2 style='font-size:12pt;color:#00000;' align='center'><h3>Search Artist</h3></td></tr>"); 
      out.println("<tr><td ><b>Artist Name</b></td><td>: <input type='text' name='givenname' id='givenname'></td></tr>"); 
      out.println("<tr><td ><b>Artist Last Name</b></td><td>: <input type='text' name='familyname' id='familyname'></td></tr>"); 
      out.println("<tr><td ><b>Date of Birth</b></td><td>: <input type='text' name='birthyear' id='birthyear'></td></tr>"); 
      out.println("<tr><td colspan=2 align='center'><input type='submit' name='submit' value='Submit'></td></tr></table>"); 
      out.println("</form>"); 
      out.println("</body></html>"); 
     } 

     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

      java.io.PrintWriter out = response.getWriter(); 
      Connection conn = null;{ 
      try { 
       Class.forName("org.postgresql.Driver"); 
       conn = DriverManager.getConnection(
         "jdbc:postgresql://localhost:5432/caglar", "postgres", 
         "abracadabra"); 
       System.out.println("Connected to the database"); 
      String agent_name = request.getParameter("givenname"); 
      String agent_lastname = request.getParameter("familyname"); 
      String dob = request.getParameter("birthyear"); 

      //if dob is left blank 
      if (request.getParameter("birthyear").equals("")) { 
       dob = null; 
       // otherwise, get the exact number and define it as variable 
      } else { 
       dob = request.getParameter("birthyear"); 
      } 
      // 
      ArrayList al=null; 
      ArrayList agent_list =new ArrayList(); 

      //Problem 1: If dob is not given, it is not searching by name or lastname. 

      String query = "select * from agent where givenname='"+agent_name+"' or familyname='"+agent_lastname+"' or birthyear='"+dob+"' order by givenname"; 
      System.out.println("query" + query); 
      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery(query); 


      while(rs.next()) 
      { 
       al = new ArrayList(); 

       al.add(rs.getString(1)); 
       al.add(rs.getString(2)); 
       al.add(rs.getString(3)); 
       al.add(rs.getString(4)); 
       System.out.println("al :: "+al); 
       agent_list.add(al); 
      } 

      request.setAttribute("agentList",agent_list); 

     System.out.println("agentList " + agent_list); 

     // out.println("agent_list " + agent_list); 




     // HTML results 
     response.setContentType("text/html"); 
     //java.io.PrintWriter out = response.getWriter(); 
     out.println("<html><head>"); 
     out.println("<title>Final Results</title></head><body>"); 
     out.println("<table width='700px' align='center' style='border:1px solid #000000;'><tr><td colspan=8 align='center' style='background-color:ffeeff'><b>Artist Record</b></td>"); 
     out.println("</tr><tr style='background-color:efefef;'><td><b>Artist ID</b></td><td><b>Date of Birth</b></td><td><b>Artist First Name</b></td><td><b>Artist Last Name</b></td></tr>"); 

     int count=0; 
     String color = "#F9EBB3"; 


     if(request.getAttribute("agentList")!=null) 
     { 
     al=(ArrayList)request.getAttribute("agentList"); 
      Iterator itr = al.iterator(); 


      while(itr.hasNext()) 
      { 

       if((count%2)==0) 
       { 

        color = "#eeffee"; 


       } 
       else 
       { 
        color = "#F9EBB3"; 
       } 
       count++; 
       ArrayList agentList = (ArrayList)itr.next(); 

       out.println("<tr style='background-color:"+color+";'>"); 
       out.println("<td>"+agentList.get(0)+"</td>"); 
       out.println("<td>"+agentList.get(1)+"</td>"); 
       out.println("<td>"+agentList.get(2)+"</td>"); 
       out.println("<td>"+agentList.get(3)+"</td></tr>"); 
      } 
     } 
     if(count==0) 
     { 
      out.println("<tr><td colspan=8 align='center' style='background-color:eeffee'><b>No Record</b></td></tr>"); 
     } 
     conn.close(); 
     System.out.println("Disconnected from database"); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
      out.println("</table></body></html>"); 

     } 

} 

} 
+0

"結果が表示されません"、または "間違っています"と表示されません。説明を提供する必要があります。 –

+0

'rs.next()'のwhileループをチェックしましたか? –

+0

コード内で迷っています。配列を作成する必要はないと言った人もいます。さて、doPOSTを記録していない状態での結果は表示されません。私もエラーはありません。 – krest

答えて

1
String query = "select * from agent where givenname='"+agent_name+"' or familyname='"+agent_lastname+"' "; 
if(dob!=null && !"".equals(dob)) 
    query = query + " or birthyear='"+dob+"'"; 

query = query+ "order by givenname"; 

ユーザーのクエリを構築するための条件文。

+0

私はそれがトリックをしたと思います。今何らかの理由で、givennameまたはlastnameを入力したときには検索されませんが、生年月日のエントリでのみ機能します...問題があると思いますか?ありがとう! – krest

+0

と私のコンソールは以下を返します: queryselect * from givenname = "'またはfamilyname =' '指定された名前で注文してください agentList [] データベースから切断されました – krest

関連する問題