【问题标题】:Debugging JavaScript and a servlet调试 JavaScript 和 servlet
【发布时间】:2014-04-13 23:13:32
【问题描述】:

我对编程很陌生。这道题是为考试做准备的。我有一个连接到我的 MySQL 数据库的 servlet。 Futheron 我有一个 JavaScript。

我有 2 个日历,您可以在其中选择“开始”日期 - “结束”日期。如果我从 2014 年 3 月 6 日到 2014 年 3 月 10 日选择 fx,我想打印出我在这个时间间隔内工作了多少小时。这意味着我的 servlet 正在从我的 MySQL 数据库中获取 COLUMN "Allday_hours"。问题是每次我从 javascript 中选择一个日期时,它只会返回 Allday_hours 中的所有时间。这意味着它正在运行所有列而不是我选择的日期。

谁能看到我在这里做错了什么?

Javascript:

  <form>
        <input id="startDate"/>                     
        <input id="endDate"/>
    </form>
    <div id="startresult"></div>
    <div id="endresult"></div>
    <script>

    $(function(){
        $("#startDate").datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function(dateText,inst){
                $('.selected-date').html(dateText);

                $.ajax({
                      url: "../getHoursSQL",
                      type: "post",
                      data: JSON,
                      success: function(data){
                           start: $("#startDate").val();
                          alert("success");
                          $("#startresult").html(data);

                      },
                      error:function(){
                          alert("failure");
                          $("#startresult").html('there is error while submit');
                      }  
                    });
            }
        });
    });

    $(function(){
            $("#endDate").datepicker({
                dateFormat: 'yy-mm-dd',
                onSelect: function(dateText,inst){
                    $('.selected-date').html(dateText);

                    $.ajax({
                          url: "../getHoursSQL",
                          type: "post",
                          data: JSON,
                          success: function(data){
                              end: $("#endDate").val();
                              alert("success");
                              $("#endresult").html(data);
                          },
                          error:function(){
                              alert("failure");
                              $("#result").html('there is error while submit');
                          }  
                        });
                }
            });
        });

</script>

小服务程序:

        package WorkPackage;

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

@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res) 
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/NekiWork";
        Connection connection=null;

        try {

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", ""); 
            String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata WHERE startDate='?' AND endDate='?'"; 
            PreparedStatement pst = connection.prepareStatement(sql);
                pst.setXXX(1,startDate);
                pst.setXXX(2,endDate);

                ResultSet rs = pst.executeQuery(sql);

            float Allday_hours_sum = 0;
                while (rs.next()){                                      
                    Allday_hours_sum += rs.getFloat("Allday_hours"); 


            }   
                res.setContentType("text/html;charset=UTF-8");          
                res.getWriter().print(Allday_hours_sum); 
                String startDate = req.getParameter("startDate");
                String endDate= req.getParameter("endDate");

            pst.close();


        }
        catch(ClassNotFoundException e){

            System.out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            System.out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            System.out.println(e);
        }
        finally {

            try {
                if (connection != null) connection.close();
            }
            catch (SQLException ignored){
                System.out.println(ignored);
            }
        }
    }
}

【问题讨论】:

  • 我删除了我的评论,因为它在评论中不可读。
  • 非常感谢您的时间和回答。在数据中可能是这样的: data: { start: $("#startDate").val(), end: $("#endDate").val() }

标签: javascript mysql servlets


【解决方案1】:

首先,您忘记将 javascript 代码中的 startDate&endData 发送到 servlet。您可以通过更改 ajax 方法参数的“数据”成员来做到这一点。

您还应该从您的 servlet 中的请求中获取它,如下所示

String startDate = req.getParameter("startDate");
String endDate= req.getParameter("endDate");

然后您应该在preparedStatement 中为您的输入提供值。

pst.setXXX(1,startDate);
pst.setXXX(2,endDate);

希望这些信息能帮助您解决问题

【讨论】:

  • 非常感谢您的回答。我刚刚编辑了我的代码。会是这样吗?
猜你喜欢
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2011-09-07
相关资源
最近更新 更多