如何改进java中sql数据库中使用日期的搜索

如何改进java中sql数据库中使用日期的搜索,java,sql-server,Java,Sql Server,我使用java语言和MS SQL Server作为数据库制作了一个软件。我面临的问题是,当我使用两个日期搜索一个日期范围时,它会给出我没有要求的项目 例如,如果我需要10月1日至7日的物品,它包括11日、12日、13日、14日、15日、16日等的物品 日期格式am使用MMM d,yyy 我使用了以下代码 String val1 = ((JTextField)jdate1.getDateEditor().getUiComponent()).getText(); String val2 = ((JT

我使用java语言和MS SQL Server作为数据库制作了一个软件。我面临的问题是,当我使用两个日期搜索一个日期范围时,它会给出我没有要求的项目

例如,如果我需要10月1日至7日的物品,它包括11日、12日、13日、14日、15日、16日等的物品

日期格式am使用MMM d,yyy

我使用了以下代码

String val1 = ((JTextField)jdate1.getDateEditor().getUiComponent()).getText();
String val2 = ((JTextField)jdate2.getDateEditor().getUiComponent()).getText();

String sql = " select * from Report_details where Date between '"+val1+"' and '"+val2+"' ";

// conn is some Connection                   
PreparedStatement myStmt = conn.prepareStatement(sql);
ResultSet rs = myStmt.executeQuery();

if(rs.next()){
    // do stuff
}

不信任用户输入

String sql = "select * from Report_details where Date between ? and ?";    
....
Date dt1 = new SimpleDateFormat("MMM d,yyyy").parse(val1);
// better yet, have your date picker return a Date object
....
myStmt.setDate(1, dt1);
....
应该是方法(或setTime或setTimestamp,取决于您的表定义)


注意:不要复制粘贴此内容,只是一个提示,让您朝正确的方向前进。

您确定val1和val2的格式正确吗?是的,Lino,它似乎在您使用的
PreparedStatement
错误的地方获取所有信息问题的关键在于您的日期是非ISO格式的,这对于SQL查询中的日期文本来说是完全错误的。相反,用这个:
2017-10-16
Wait…我部分放弃了我说的话。这里最好的做法是将普通的旧Java
Date
对象提供给一个准备好的语句。让Java来担心格式。在正确的轨道上,但OP仍然需要获取日期,而不是字符串。啊,对了,谢谢@TimBiegeleisen,编辑了答案以显示我将向上投票,但我想他的UI小部件后面已经有一个
日期
(或者可以自己生成一个日期)。但这是OP,不是你。