Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WHERE子句中的MySQL语句出错_Java_Mysql_Servlets - Fatal编程技术网

Java WHERE子句中的MySQL语句出错

Java WHERE子句中的MySQL语句出错,java,mysql,servlets,Java,Mysql,Servlets,我正在尝试从我的表单中获取值startDate和endDate: <form> <input id="startDate"/> <input id="endDate"/> </form 编辑: 以下是我的数据库的外观: 这是我的javascript,我从日历中获取一些值: <form> <input id="startDate"/>

我正在尝试从我的表单中获取值startDate和endDate:

<form>
        <input id="startDate"/>                     
        <input id="endDate"/>
    </form
编辑: 以下是我的数据库的外观:

这是我的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>

如错误中所述,它无法在表中找到该列。请检查您的表格Workdata是否有字段startDate

而且,将日期作为字符串传递也不好,而且要小心使用=运算符来比较日期或日期时间字段。 我的建议是比较两个操作员之间的日期时间使用情况

... WHERE startDate BETWEEN value1 AND value2

从您的图像中我可以看出,它相当混乱,信息太多,Workdata表中没有名为startDate的列。SQL语句中的所有列必须实际存在于相应的表中

你是说专栏日期吗? 如果你这样做了,你就不应该使用

pst.setString(1, startDate);
因为这只适用于设置字符串列varchar、longtext等。相反,您应该使用

pst.setDate(1, startDate);
其中startDate是java.sql.Date,而不是字符串

编辑:

为了回应你的更新,我更新了我的答案

线路

Date startDate;
当然不会编译,因为startDate已经声明为字符串。即使更改了名称,也没有设置请求参数中给定的日期

您需要执行以下操作:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = format.parse(req.getParameter("startDate"); 
pst.setDate(1,startDate);

您需要更改SimpleDataFormat构造函数中的字符串,以满足日期字符串格式的需要。上述代码适用于格式类似2014-03-11的日期。您的格式可能不同。请参见

如果要获取数据,则应改为获取数据

Date startDate;
//use SqlDate instead of string.

String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata WHERE Date = ?";
PreparedStatement pst = connection.prepareStatement(sql);
pst.setDate(1,startDate);
现在,输出中有了一些内容,就像表中有date列一样

更新:

如果要对日期参数使用字符串数据类型。。删除日期startDate并保留现有的日期。。之后,使用SimpleDataFormatter解析日期

例如

String startDate = req.getParameter("Date");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//surround below line with try catch block as below code throws checked exception
Date start = sdf.parse(startDate);
out.println(sdf.format(startDate)); //this is what you want yyyy-MM-dd  

谢谢..

请显示您的表格列。您是否检查了区分大小写?Workdata表格是否有startDate列?大家好。谢谢你的快速回答,我刚刚编辑了我的问题。也许你能看到什么-您的表中没有startDate和endDate,因此无法获取这样的数据!!你好,罗希塔。非常感谢你的回答。我刚刚编辑了我的问题。你能看到我在这里做错了什么吗?根据你的表格,字段名是Date。所以sql应该选择*,Day_hours+Day_minutes/60作为从Workdata开始的所有Day_hours,其中'Date'介于两者之间?和注意:在字段名日期之前和之后使用`。因为我认为Date是Mysql中的一个关键字。注意,between运算符表示日期大于或等于第一个值,小于或等于第二个值。欲知更多详情,罗希塔你好。我已经更新了我的代码。现在它看起来更容易复原了吗?非常感谢你的时间和回答。非常感谢你的回答。我试着玩弄这些代码。我更新了我的问题。现在看起来怎么样?再次感谢您抽出时间。谢谢你的时间和回答。你好,尼克。谢谢你的回答。我现在已经更新了我的答案。你觉得它看起来怎么样?如果您有时间发表您的意见,我将非常高兴:-非常感谢您的时间和回答。其中一些现在可以工作了:-
String startDate = req.getParameter("Date");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//surround below line with try catch block as below code throws checked exception
Date start = sdf.parse(startDate);
out.println(sdf.format(startDate)); //this is what you want yyyy-MM-dd