2015-06-27 57 views
3

我有我的應用程序下面的代碼我需要一個MySQL日期時間範圍在Java中

String sql = "SELECT colA, colB, colC " + 
    "FROM " + tblName + " WHERE UserId = " + userId + 
    " AND InsertTimestamp BETWEEN " + lastDate + 
    " AND " + DataProcessor.TODAY + " ORDER BY UserId, Occurred"; 
try{ 
    if(null == conn) 
    openDatabaseConnection(); 
    PreparedStatement stmt = conn.prepareStatement(sql); 
    ResultSet rs = stmt.executeQuery(); <------- this is the line which throws the SQL exception 
    retArray = this.getArrayListFromResultSet(rs); 
}catch(SQLException sqle){ 
    JSONObject parms = new JSONObject(); 
    eh.processSQLException(methodName, sqle, sql, parms); 
} 

所以,當我在調試器中運行我的應用程序,我得到這個異常消息中幫助選擇

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在第1行'00:00:00.0和2014-08-20 00:00:00.0 ORDER BY UserId'發生時使用正確的語法。

I相當肯定的是,有一個簡單而合理的解決方案,但我一直無法找到它。

我試過尋找解決方案或不同格式的MySQL手冊。

我試着通過SQL中的TIMESTAMP()functino和DATE()函數運行我的時間戳,這兩者都沒有幫助。

我將完整的SQL從Java代碼中提取出來並在MySQL Workbench中運行,沒有任何問題。所以現在我正在尋求專家的幫助。

+0

http://bobby-tables.com/ –

+0

是的,我感覺你。這不是最好的編碼實踐,如果這不是一個私有方法從調用方法中傳遞給特定的,明確定義的parms,那麼你就會死定了。 –

回答

3

SQL中的日期必須用單引號括起來,如字符串。 當你使用準備好的狀態信息時,爲什麼你不使用'?'和stmt.setDate(...)?

String sql = "SELECT colA, colB, colC " + 
"FROM " + tblName + " WHERE UserId = ?" + 
" AND InsertTimestamp BETWEEN ?" + 
" AND ? ORDER BY UserId, Occurred"; 
try { 
    if(null == conn) { 
     openDatabaseConnection(); 
    } 
    PreparedStatement stmt = conn.prepareStatement(sql); 
    stmt.setInt(1, userId); 
    stmt.setDate(2, lastDate); 
    stmt.setDate(3, DataProcessor.TODAY); 
    ResultSet rs = stmt.executeQuery(); 
    retArray = this.getArrayListFromResultSet(rs); 
} catch(SQLException sqle) { 
    JSONObject parms = new JSONObject(); 
    eh.processSQLException(methodName, sqle, sql, parms); 
} 

無論如何,我認爲你是以相反順序設置日期。你應該先把'今天'放到最後的日子。雖然我不知道你的約束...

+0

'stmt.setInteger(1,userId)'可能應該是'stmt.setString(1,userId)'(或'stmt.setInt(1,userId)')。 –

+0

是的,或setLong或其他,我不記得語法...改變了! –

+0

好吧,無論如何,你需要在單引號內包含日期,如果沒有,你會得到'語法錯誤' –

相關問題