【问题标题】:Querying data from Oracle database using java servlet with Netbeans使用带有 Netbeans 的 java servlet 从 Oracle 数据库中查询数据
【发布时间】:2008-11-27 12:02:12
【问题描述】:

来自 index.jsp 代码,

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

示例我希望“hf60”是一个变量(用户输入),其中用户必须从输入文本输入/写入数据,然后提交并获取数据,以便结果为

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

我应该在哪里插入该代码,是在 InsertServlet .java 中还是在 Index.jsp 中?或制作另一个 filename.java 代码?请帮忙。谢谢;)

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>

插入Servlet.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);

}
 }

【问题讨论】:

    标签: java jsp netbeans servlets


    【解决方案1】:

    如果你坚持使用这个设计,我建议你使用JSTL。这提供了一组用于访问数据、控制逻辑和执行 SQL 访问的标签。

    请参阅标准标记库上的 Sun 教程和SQL tags。这比将 scriptlet 嵌入到 JSP 中要好得多。也就是说,我会推荐这种方法(或脚本)仅用于原型或作为非常临时的修复。

    使用 JSTL,您可以将所有小脚本替换为类似以下内容:

    <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>
    

    【讨论】:

      【解决方案2】:

      您可以访问JSP 中的请求。所以如果你的JSP 被这样访问:

      test.jsp?q=userinput
      

      您可以在JSP 中这样获取它:

      request.getParameter('userinput');
      

      当你这样做时,你应该将你的JSP 代码转换为至少使用preparedStatement

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

      【讨论】:

      • 也许对这个答案提出警告,这不是推荐的最佳实践......
      • @JamesSchek 最佳做法是什么?
      【解决方案3】:

      正如 tvanfosson 所说,您应该从视图逻辑 (JSP) 中删除所有数据库访问代码。您应该只在 JSP 中显示信息,让 Servlet 完成所有处理。我还强烈建议您使用像 Hibernate 这样的 OMR 框架。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2017-07-17
        • 2014-04-24
        • 1970-01-01
        相关资源
        最近更新 更多