java - 我需要帮助在 Java 的 MySQL DateTime 范围内进行选择

标签 java mysql datetime

我的应用程序中有以下代码

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: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '00:00:00.0 AND 2014-08-20 00:00:00.0 ORDER BY UserId, Occurred' at line 1

我相当确定对此有简单合理的解决方案,但我一直没能找到。

我已经尝试在 MySQL 手册中寻找解决方案或不同的格式。

我尝试通过 SQL 中的 TIMESTAMP() 函数和 DATE() 函数运行我的时间戳,但都没有帮助。

我从 Java 代码中提取了完全形成的 SQL,并在 MySQL Workbench 中运行它,没有任何问题。所以现在我正在向专家寻求帮助。

最佳答案

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);
}

无论如何,我认为您设置的日期顺序相反。您应该先输入“今天”,然后再输入最后日期。虽然不知道你的约束...

关于java - 我需要帮助在 Java 的 MySQL DateTime 范围内进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093749/

相关文章:

c# - 如何在 Oracle DB 的 SQL 查询中传递 DateTime 参数

swift - 日期格式器 swift 3

python - 棉花糖根据破坏它的机器不同地处理时间戳

java - String.format 在 Kotlin 和 Java 中工作异常

PHP + MySQL 使用 while 循环导致结果缓慢

mysql - 在 CircleCI 上并行运行时 Django Unittest 失败

php - ActiveCollab 自定义插入/更新查询问题

java - 从 mainactivity 中的另一个类执行 asynctask

java - Appium:isDisplayed() 与 findElements(by).size

java - 建立下载本地文件的链接