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

【讨论】:

我已经使用了蒂姆的建议,而且效果很好。我也会记住这一点,并将尝试下一个我要做的项目。谢谢!

以上是关于SQL 语句 - Java的主要内容,如果未能解决你的问题,请参考以下文章

java中sql语句为啥不能出现 * ?

java中怎么执行sql语句

java 多表联查sql语句效率问题

java中执行sql插入语句怎么弄

java语句 sql 批量增加数据

如何用java语言中如何执行sql查询语句