![](/img/trans.png)
[英]Unknown column 'users.email' in 'where clause' at Query.formatError
[英]SQLException caught: Unknown column in 'where clause'
我正在制作一個日歷系統,我可以在兩個日期之間進行選擇,然后返回我在此期間工作了多少小時。 下圖為一天。 日歷系統如下所示:
如您所見,我有一個開始日期和結束日期。 從javascript我應該拿起值並發送到我的servlet。
這是Javascript:
<script>
$(function() {
$(".datepicker" ).datepicker({dateFormat: 'yy-mm-dd'});
});
</script>
</head>
<body>
DatePicker Ajax Post:
<form method="post" id="myForm" action="../getHoursSQL">
Start Date:
<input type="text" name="startDate" class="datepicker"/><br/>
End Date:
<input type="text" name="endDate" class="datepicker"/><br/>
<input type="submit"/>
</form>
<div id="startresult"></div>
<div id="endresult"></div>
</body>
<script type="text/javascript">
$("input[name=endDate]").datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(date, instance){
var jsonStr = $('#myForm').serializeArray();
console.log(JSON.stringify(jsonStr));
$.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');
}
});
}
});
</script>
我的servlet在這里:
import java.io.*;
import java.sql.*;
import java.text.SimpleDateFormat;
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 {
//Load database driver
Class.forName("com.mysql.jdbc.Driver");
//Connection to the database
connection = DriverManager.getConnection(connectionURL, "root", "");
//Getting the data from database
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata "
+ "WHERE startDate = ? AND endDate = ? ";
PreparedStatement pst = connection.prepareStatement(sql);
SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd");
java.util.Date util_StartDate = format.parse( req.getParameter("startDate") );
java.sql.Date sql_StartDate = new java.sql.Date( util_StartDate.getTime() );
java.util.Date util_EndDate = format.parse( req.getParameter("endDate") );
java.sql.Date sql_EndDate = new java.sql.Date( util_EndDate.getTime() );
pst.setDate( 1, sql_StartDate );
pst.setDate(2, sql_EndDate );
System.out.println(req.getParameter("startDate"));
System.out.println(req.getParameter("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){
e.printStackTrace();
}
finally {
try {
if (connection != null) connection.close();
}
catch (SQLException ignored){
System.out.println(ignored);
}
}
}
}
所以問題是,當我運行我的頁面時,我得到一個錯誤SQLException捕獲:未知列'startDate'in'where clause'。 我的數據庫看起來像這樣:
P_id | Date | Day_hours | Day_minutes | Allday_hours
Job 1 1 2014-03-10 4 45 4.45
Job 2 2 2014-03-10 5 15 5.15
Job 3 3 2014-03-09 3 30 3.30
Job 4 4 2014-03-09 1 45 1.45
Printet out: **15.15**
這當然是因為我的數據庫中沒有任何“startDate”。 但是,如何進行以下SQL查詢來獲取日期?
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata "
+ "WHERE startDate = ? AND endDate = ? ";
當我點擊“提交”時,我在我的控制台中獲得了這個主題:
2014-03-03 2014-03-21
SQLException caught: Unknown column 'startDate' in 'where clause'
你需要在WHERE
關鍵字之前添加一個Space,如下所示,
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata "
+ " WHERE Date Between ? AND ? ";
正確答案是:
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata "
+ " WHERE Date = ? AND Date = ? ";
您的表沒有名稱為startDate
和endDate
但為date
。
因此拋出了SQL Exception。
更改:
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours
FROM Workdata "
+ "WHERE startDate = ? AND endDate = ? ";
至:
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours
FROM Workdata "
+ "WHERE Date = ? AND Date = ? ";
如果只有Date
列,則不能在where
子句中使用AND
。
它永遠不會發生。
你必須要么尋找-或者是一個之間的條款。
示例 :
更改:
WHERE Date = ? AND Date = ?
至:
WHERE Date IN ( ?, ? )
要么
WHERE Date between ? and ?
WHERE
子句傳遞兩個變量。 嘗試將它們稱為{0}
和{1}
,或使用javascript startDate
和endDate
的名稱。
WHERE Date BETWEEN {0} and {1}
要么,
WHERE Date BETWEEN startDate AND endDate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.