java - 如何将 sql 查询的结果发布到 servlet 中?

标签 java sql servlets

我一直卡在这个问题上。

这是我的 servlet:

package HWpackage;

import java.io.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.*;
import javax.servlet.http.*;

public class DemoData extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Demo of Data Persistence</title>");
            out.println("</head>");
            out.println("<body>");

        try {
              String driver = "oracle.jdbc.driver.OracleDriver";
              String url = "jdbc:oracle:thin:@coit-ora01.uncc.edu:1521:class";
              String username = "johnR";
              String password = "lAylko0K";

              // Load database driver if it's not already loaded.
              Class.forName(driver);
              // Establish network connection to database.
              Connection connection =
                DriverManager.getConnection(url, username, password);
              // Create a statement for executing queries.
              Statement statement = connection.createStatement();
              String query =
                "SELECT sum(cost) FROM stocks where username = 'Bora'";
              // Send query to database and store results.
              ResultSet resultSet = statement.executeQuery(query);

              while(resultSet.next()) {


                out.println("Your total cost is" );


              }
              connection.close();
            } catch(ClassNotFoundException cnfe) {
              System.err.println("Error loading driver: " + cnfe);
              // Useful when you debug your program on the coit server
              // where System.out.println("") becomes futile
              out.println("<tr>  Error loading driver: " + cnfe);
              out.println("</tr>");
            } catch(SQLException sqle) {
              System.err.println("Error with connection: " + sqle);
              // Again, for debug purpose
              out.println("<tr>  Error with connection: " + sqle);
              out.println("</tr>");
            }

            out.println("</table>");
            out.println("</body>");
            out.println("</html>");
        } finally { 
            out.close();
        }
    } 

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

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

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

    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

我想知道在 servlet 中发布此查询结果的正确方法:

String query =
                "SELECT sum(cost) FROM stocks where username = 'Bora'";

之后是

out.println("Your total cost is" );

如果有人可以向我提供这些信息,你将让我度过一个愉快的夜晚。谢谢大家。

最佳答案

其中一种方法是这样做:-

  1. SELECT sum(cost) AS COST FROM stocks where username = 'Bora'

  2. 在此代码块中修改为:

while(resultSet.next()) {

            Double cost = resultSet.getDouble("COST");   
            out.println("Your total cost is" + cost ); 

}

旁注:

  1. 不要以这种方式对 sql 参数进行硬编码。你很容易SQL injection攻击。使用参数标记即。 `SELECT sum(cost) AS COST FROM stocks where username = ? and JDBC PreparedStatement执行它。
  2. 创建一个单独的 DAO处理所有数据库工作的类。这将促进代码中的解耦。

关于java - 如何将 sql 查询的结果发布到 servlet 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5615720/

相关文章:

java - 当 queryParameter 没有值时 getQueryString 返回空字符串

tomcat - 如何使用默认参数将纯 servlet url 重定向到同一个 servlet?

java - 注册一个 Stream "completion"钩子(Hook)

java - 将一个类从一个jsp页面导入到另一个jsp页面

java - 如何使用 Spring JPA 在同一事务中的不同数据库上维护多个 sql 查询

mysql - 如何停止对忽略的插入进行自动递增,这些插入不会对 MySQL 进行任何更改?

java - 如何在java代码中从<select multiple>检索多个选定的值?

java - 使用包含另一个类作为属性的对象的构造函数

mysql - 如何在 MySQL 中获取当前日期和时间?

sql - Powershell:将文件路径指定为变量