WHERE子句中的MySQL语句中出现java错误
我正在尝试从我的表单中获取值“startDate”和“endDate”:
<form>
<input id="startDate"/>
<input id="endDate"/>
</form
表单连接到一个javascript,javascript从那里进入一个MySQL数据库。问题是,每次在servlet中运行SQL查询时,都会出现以下错误:
捕获到SQLException:where子句中的未知列“startDate”
有人能看出我做错了什么吗? 祝朱莉今天愉快
已编辑代码:我已尝试编辑我的代码。我现在得到的错误是:Date startDate,上面写着:“复制局部变量startDate”。那当然是因为我有 字符串startDate=req。getParameter(“startDate”)。我再也不用用这个了? 包工作包
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;
String startDate = req.getParameter("startDate");
String endDate= req.getParameter("endDate");
try {
//Load database driver
Class.forName("com.mysql.jdbc.Driver");
//Connection to the database
connection = DriverManager.getConnection(connectionURL, "root", "");
//Getting the data from database
Date startDate;
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata WHERE Date = ?";
PreparedStatement pst = connection.prepareStatement(sql);
pst.setDate(1,startDate);
//pst.setString(2,endDate);
//Show the result from database
ResultSet rs = pst.executeQuery();
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);
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);
}
}
}
}
编辑: 以下是我的数据库的外观: http://postimg.org/image/3sbzplg9d/
这是我的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>
# 1 楼答案
据我从你的图片中所知(它相当混乱,信息太多),Workdata表中没有名为startDate的列。SQL语句中的所有列必须实际存在于相应的表中
你是说专栏日期吗? 如果你这样做了,你就不应该使用
因为这只适用于设置字符串列(varchar、longtext等)。相反,你应该使用
这里是一个
java.sql.Date
,而不是一个String
编辑:
为了回应你的更新,我更新了我的答案
排队
当然不会编译,因为
startDate
已经是声明为字符串的。即使更改了名称,也没有设置请求参数中给出的日期你需要这样做:
您需要更改SimpleDataFormat构造函数中的字符串以满足您的需要(日期字符串的格式)。上述代码适用于格式为2014-03-11的日期。你的格式可能不同。见http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
# 2 楼答案
如果你想获取数据,那么你应该使用这个
现在,输出中有了一些内容,就像表中的
date
列一样更新:
如果要对日期参数使用
String
数据类型。。移除Date startDate
并保留现有内容。。之后,使用SimpleDataFormatter解析日期例如
谢谢
# 3 楼答案
正如错误中提到的,它无法在表中找到该列。请检查您的表格Workdata是否有字段
startDate
而且,以字符串形式传递日期也不好,而且要小心使用
=
运算符来比较日期或日期时间字段。 我的建议是比较datetime useBETWEEN
操作符