【问题标题】:SQL Statement - JavaSQL 语句 - Java
【发布时间】:2016-07-07 07:01:59
【问题描述】:

我一直在尝试提出几个关于如何正确执行此操作的 SQL 语句,但没有成功。我试过between>= and =<。基本上,我使用的 SQL 语句是有效的,但只是在一定程度上。

我的代码是这样工作的:用户将选择一个日期范围(从日期到日期),程序将检索并显示它在这些范围内的数据。就像我说的,它有效,但它也显示了其他月份的日子,我想显示的只是用户选择的那些特定日子。例如。从 2016 年 7 月 1 日到 2016 年 7 月 5 日。发生的事情是一年中的任何月份都会显示这些日期,这使得该特定方法有点没用。

任何帮助或任何解释为什么会这样。

下面是我的代码:

stringFromDate = sdf.format(fromDate.getDate());

stringToDate = sdf.format(toDate.getDate());

String query = "Select * from tblSavings where date between '" + stringFromDate+ "' and '" + stringToDate+"'";

try{ 

    pstmt = conn.prepareStatement(query);

    rs = pstmt.executeQuery();

    tblList.setModel(DbUtils.resultSetToTableModel(rs));

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • stringFromDatestringToDate 的格式很可能不正确,这就是查询无法按预期工作的原因。更新并向我们展示正在执行的实际原始查询。另外,使用的是什么版本的 SQL?
  • @marc_s 我正在查看您现在给我的链接。谢谢。
  • @TimBiegeleisen 我正在使用 SQLite。谢谢!我不明白为什么它会从其他月份开始。我真的认为它正在工作,但后来这个。说到术语,我有点白痴,我想给你你所问的,但我担心你把我说得一团糟。还是谢谢。 :)
  • 向我们展示stringFromDatestringToDate 的字面值。

标签: sql sqlite date jdbc


【解决方案1】:

您可以使用SimpleDateFormat 获取格式正确的字符串以用作SQLite 中的日期,正确格式为yyyy-MM-dd

String pattern = "yyyy-MM-dd";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
String stringFromDate = dateFormat.format(fromDate.getDate());

【讨论】:

  • 这修复了它!非常感谢!
【解决方案2】:

您似乎想在这里重新发明轮子。 PreparedStatements 正是为此用例创建的——在预定义的结构中设置变量值。在您的情况下,使用 setDate 方法。从上下文我猜你的fromDatetoDate 变量是java.util.Date 实例,所以你必须将它们转换为java.sql.Dates

java.sql.Date fromDateToBind = new java.sql.Date(fromDate);
java.sql.Date toDateToBind = new java.sql.Date(toDate);

String query = "Select * from tblSavings where date between ? and ?";

try{ 
    pstmt = conn.prepareStatement(query);
    pstmt.setDate(1, fromDateToBind);
    pstmt.setDate(2, toDateToBind);
    rs = pstmt.executeQuery();

    // use the results...
} // etc...

【讨论】:

  • 我已经使用了蒂姆的建议,而且效果很好。我也会记住这一点,并将尝试下一个我要做的项目。谢谢!
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多