我可以使用通过ajax传递的值来使用准备好的语句进行数据库搜索吗?

问题描述 投票:0回答:1

伙计们,我在这个问题上苦苦挣扎,我是使用ajax调用和jdbc相关函数的新手。接下来,我使用ajax函数将datepicker值传递给servlet端,该函数正常工作,我将值打印在随机div中只是为了查看其是否正常工作。现在,我该如何取该值并将其用于准备好的语句中,以根据用户选择的日期来搜索数据库数据,这完全可以做到吗?

这里有一些代码可以添加更多上下文

$.ajax({
            type:'POST',
            data:{dateinput:dateinput}, 
            url:'/Rest/sales?action=param2',
            dataType: 'json',
            success:function(result){

                $('#altdate').html(result);
            },
            error: function (error) {
                console.log(error);
            }

        });

    });

我有一个带有静态值的准备好的语句,只是为了查看它是否正在工作(它确实起作用),但是在这里我无法取得进展,如何声明该值?

ConnectionPool pool = ConnectionPool.getInstance(DatosGeneral.DATABASE);
    Connection connection = pool.getConnection();
    PreparedStatement ps = null;
    ResultSet rs = null;

    String[] ids = null;
    double[] prices = null;


    try{
        String query = "SELECT * FROM [" + GeneralData.DATABASE + "].[dbo].[SalesDetails] "
                + "WHERE [Branch] = '" + GeneralData.bra + "' "
                + "AND [UpDate] = ?" ; //previous value 20190521
        System.out.println(query);
        ps = connection.prepareStatement(query,
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY);
        rs = ps.executeQuery();
        int rowcount = 0;

        if (rs.last()) {
            rowcount = rs.getRow();
            rs.beforeFirst();
        }

        ids = new String[rowcount];
        prices = new double[rowcount];

        for (int i = 0; rs.next(); i++) {
            if (rs.getString("Type").replaceAll("\\s+", "").equals("PROD")) {
                ids[i] = rs.getString("ProductCode").replaceAll("\\s+", "");
                prices[i] = rs.getDouble("Price");
            }
        }

最近是我在请求参数的dopost函数

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String action= request.getParameter("action");
    if(action.equals("param1")){
        int i = Integer.parseInt(request.getParameter("branch"));
        GeneralData.bra = GeneralData.branches[i];
        GeneralData.braName = GeneralData.braNames[i];
        System.out.println(GeneralData.bra);

    }else if (action.equals("param2")){
        String altdate = request.getParameter("dateinput");
        PrintWriter out = response.getWriter();
        out.print(altdate);
    }

任何帮助将不胜感激

java servlets prepared-statement
1个回答
0
投票

好了,我解决了,我唯一要做的就是声明一个变量,我可以在其中存储通过ajax调用传递的值(datepicker的值),并使用doPost方法对其进行分配。像这样的东西:

private String datePickerValue=null;

doPost方法:

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

      datePickerValue=altdate;
 }

最后,在准备好的语句的查询中,仅指定该变量作为用于从db获取数据的参数:

try{
    String query = "SELECT * FROM [" + GeneralData.DATABASE + "].[dbo].[SalesDetails] "
            + "WHERE [Branch] = '" + GeneralData.bra + "' "
            + "AND [UpDate] = '" + datePickerValue +"'" ; //previous value 20190521
© www.soinside.com 2019 - 2024. All rights reserved.