gpt4 book ai didi

java - 如何格式化 SQL DATETIME 以将其与给定日期进行比较并检索一条记录?

转载 作者:行者123 更新时间:2023-12-01 15:23:19 24 4
gpt4 key购买 nike

您好,必须检索数据库的一条记录,这条记录应该尽可能接近我的参数(日期(YYYY-MM)),请记住数据库(sql server)中的列是DATETIME,所以我需要格式化它以便我可以比较它,这是我一直在做的:

public Document findByDate(String date) throws GeneralException{
Document docs = new Document();
String d1 = date;
String delimiter = "-";
String[]temp = d1.split(delimiter);
try{
String sql = "SELECT TOP(1) * FROM Document WHERE issueDate >= '" + temp[1]+ temp[0] +"' AND issuedate < '"+ temp[1]+ temp[0] +"' ORDER BY issueDate DESC ";
ResultSet rs = this.executeQuery(sql);
while(rs.next()){
docs = (Document) this.build(rs);
}
if(docs != null){
return docs;
} else {
return docs = null;
}
} catch (SQLException ex){
throw new GeneralException(ex);
}
}

非常感谢

最佳答案

您不应使用字符串连接将参数传递给查询。这很容易出错,并且依赖于数据库和区域设置,并且使您的代码容易受到 SQL 注入(inject)攻击。相反,使用 prepared statements ,并将日期参数作为 java.sql.Date 传递,而不是作为字符串传递:

String sql = 
"SELECT TOP(1) * FROM Document WHERE issueDate >= ? AND issuedate < ? ORDER BY issueDate DESC";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(1, date);
stmt.setDate(2, date);
ResultSet rs = stmt.executeQuery();

也就是说,我不知道您的查询如何工作。数据库中的日期如何既小于或等于给定日期,又大于同一日期?也许您应该使用您的日期作为下限,并使用您的日期 + 1 个月作为上限?

关于java - 如何格式化 SQL DATETIME 以将其与给定日期进行比较并检索一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com