2008-11-27 8 views
2

à partir du code index.jsp,Interrogation des données de base de données Oracle en utilisant servlet java avec Netbeans

statement.executeQuery("select * from fus where tester_num like 'hf60' ") ; 

Exemple Je veux "HF60" être une variable (userinput), dans laquelle l'entrée USER doit/écrire des données à partir du texte d'entrée puis soumettre et obtenir les données afin que le résultat sera

("select * from fus where tester_num like 'userinput' ") 

Où dois-je insérer ce code, est-il en InsertServlet .java ou index.jsp.? ou faire un autre code filename.java? S'il vous plaît aider. Merci;)

index.jsp

<%@ page import="java.sql.*" %> 

<% Class.forName("oracle.jdbc.driver.OracleDriver"); %> 

<HTML> 
<HEAD> 
    <TITLE>SHIFT REPORT </TITLE> 
</HEAD> 

<BODY BGCOLOR=##342D7E> 
    <CENTER> 
    <H2><FONT COLOR="#ECD672" FACE="Verdana" >SHIFT REPORT</FONT></H2></CENTER> 
<hr> 
    <% 


Connection connection=DriverManager.getConnection ("jdbc:oracle:thin:@oradev2.*****.com:1521:RPADB","shift_admin", // 
     "shift_admin" 
      ); 

     Statement statement = connection.createStatement() ; 
//**Should I input the codes here?** 
     ResultSet resultset = 
      statement.executeQuery("select * from fus where tester_num like 'hf60") ; 
    %> 

    <TABLE BORDER="1" BGCOLOR="CCFFFF" width='200%' cellspacing='1' cellpadding='0' bordercolor="black" border='1'> 
     <TR> 
      <TH bgcolor='#DAA520'> <font size='2'>RECORD NUMBER</TH> 
      <TH bgcolor='#DAA520'><font size='2'>TESTER NUMBER</TH> 
      <TH bgcolor='#DAA520'><font size='2'>DATE</TH> 
      <TH bgcolor='#DAA520'><font size='2'>TIME</TH> 
      <TH bgcolor='#DAA520'><font size='2'>SYSTEM TYPE</TH> 
      <TH bgcolor='#DAA520'><font size='2'>PACKAGE</TH> 
      <TH bgcolor='#DAA520'><font size='2'>SOCKETS</TH> 
      <TH bgcolor='#DAA520'><font size='2'>VALIDATED BY</TH> 
     </TR> 

     <% while(resultset.next()){ %> 
     <TR> 
      <TD> <font size='2'><center><%= resultset.getLong(1) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getString(2) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getDate(3) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getString(4) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getString(5) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getString(6) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getString(7) %></center></TD> 
      <TD> <font size='2'><center><%= resultset.getString(8) %></center></TD> 
      </TR> 

     <% } %> 

    </TABLE>  
     </BODY> 
</HTML> 

InsertServlet.java

package fusion.shift.servlets.db; 

import java.sql.*; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class InsertServlet extends HttpServlet { 


public void init(ServletConfig config) throws ServletException { 
    super.init(config); 
} 

public void destroy() { 
} 
public boolean processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 


      String rec_num = request.getParameter("rec_num"); 
      String tester_num = request.getParameter("tester_num"); 
      String t_date = request.getParameter("t_date"); 
      String t_time = request.getParameter("t_time"); 
      String sys_type = request.getParameter("sys_type"); 
      String packages = request.getParameter("package"); 
      String sockets = request.getParameter("sockets"); 
      String sockets = request.getParameter("val"); 


    Connection con = null; 
    Statement stmt = null; 
    ResultSet rs = null; 
    PreparedStatement ps = null; 

    try { 
       Class.forName("oracle.jdbc.driver.OracleDriver"); 
    con=DriverManager.getConnection("jdbc:oracle:thin:@oradev2.*****.com:1521:RPADB","shift_admin", // 
     "shift_admin" 
      ); 


     String sql; 
        sql = "INSERT INTO fusion_shiftrpt(RECORD_NUM, TESTER_NUM, T_DATE, T_TIME, SYSTEM_TYPE, PACKAGE, SOCKETS,VAL) VALUES (?,?,?,?,?,?,?,?)"; 

      ps = con.prepareStatement(sql); 
     stmt = con.createStatement(); 

       ps.setString(1, rec_num); 
      .0+ ps.setString(2, tester_num); 
          ps.setString(3, t_date); 
          ps.setString(4, t_time); 
          ps.setString(5, sys_type); 
          ps.setString(6, packages); 
          ps.setString(7, sockets); 
          ps.setString(8, val); 
          ps.executeUpdate(); 

     } catch (SQLException e) { 
     throw new ServletException(e); 
    } catch (ClassNotFoundException e) { 
     throw new ServletException(e); 
    } finally { 
     try { 
      if(rs != null) 
       rs.close(); 
      if(stmt != null) 
       stmt.close(); 
      if(ps != null) 
       ps.close(); 
      if(con != null) 
       con.close(); 
     } catch (SQLException e) {} 
    } 

return(true); 
} 


protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request,response);  

} 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
processRequest(request,response); 
//String url = request.getRequestURI(); 
//System.out.println(url); 

} 
} 

Répondre

2

Vous avez accès à la demande dans un JSP. Donc, si votre JSP devait être consulté comme ceci:

test.jsp?q=userinput 

Vous pouvez y accéder comme celui-ci dans le JSP:

request.getParameter('userinput'); 

Vous devez convertir votre code JSP au moins utiliser un preparedStatement lorsque vous faites ceci:

PreparedStatement ps = connection.prepareStatement("select * from fus where tester_num like ?"); 
ps.setString(1, "%" + request.getParameter('userinput') + "%"); 
ResultSet resultSet = ps.executeQuery(); 
+0

gifle Peut-être une mise en garde sur cette réponse que ce n'est pas une pratique recommandée ... –

+0

@JamesSchek Quelle est la pratique de la meilleur entrainement? –

0

Comme l'a dit tvanfosson, vous devez supprimer tout le code d'accès à la base de données de votre JSP. Vous devriez juste montrer l'information dans votre JSP, laissez le Servlet faire tout le traitement. Je vous recommande fortement d'utiliser un framework OMR comme Hibernate.

4

Si vous insistez pour rester avec cette conception, je vous suggère d'utiliser JSTL. Cela fournit un ensemble de balises pour accéder aux données, contrôler la logique et effectuer un accès SQL.

Voir le tutoriel de Sun sur la bibliothèque de balises standard et le SQL tags. C'est une approche bien meilleure que l'intégration de scriptlets dans votre JSP. Cela dit, je recommanderais que cette approche (ou scriplets) ne soit utilisée que pour des prototypes ou comme une solution très temporaire.

Avec JSTL, vous pouvez remplacer tous les scriptlets avec quelque chose de similaire à:

<sql:query var="rows" > 
    select * from fus where tester_num like ? 
    <sql:param value="${param.user_input}" /> 
</sql:query> 

<table> 
    <c:forEach var="row" items="${rows}"> 
     <tr> 
     <td>${row.column1name}</td> 
     <td>${row.column2name}</td> 
     <td>${row.column3name}</td> 
     </tr> 
    </c:forEach> 
</table> 
Questions connexes