SQL 语句 - Java
Posted
技术标签:
【中文标题】SQL 语句 - Java【英文标题】:SQL Statement - 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 注入stringFromDate
和 stringToDate
的格式很可能不正确,这就是查询无法按预期工作的原因。更新并向我们展示正在执行的实际原始查询。另外,使用的是什么版本的 SQL?
@marc_s 我正在查看您现在给我的链接。谢谢。
@TimBiegeleisen 我正在使用 SQLite。谢谢!我不明白为什么它会从其他月份开始。我真的认为它正在工作,但后来这个。说到术语,我有点白痴,我想给你你所问的,但我担心你把我说得一团糟。还是谢谢。 :)
向我们展示stringFromDate
和stringToDate
的字面值。
【参考方案1】:
您可以使用SimpleDateFormat
获取格式正确的字符串以用作SQLite 中的日期,正确格式为yyyy-MM-dd
:
String pattern = "yyyy-MM-dd";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
String stringFromDate = dateFormat.format(fromDate.getDate());
【讨论】:
这修复了它!非常感谢!【参考方案2】:您似乎想在这里重新发明***。 PreparedStatement
s 正是为此用例创建的——在预定义的结构中设置变量值。在您的情况下,使用 setDate
方法。从上下文我猜你的fromDate
和toDate
变量是java.util.Date
实例,所以你必须将它们转换为java.sql.Date
s
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...
【讨论】:
我已经使用了蒂姆的建议,而且效果很好。我也会记住这一点,并将尝试下一个我要做的项目。谢谢!以上是关于SQL 语句 - Java的主要内容,如果未能解决你的问题,请参考以下文章