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

标签 java sql format

您好,必须检索数据库的一条记录,这条记录应该尽可能接近我的参数(日期(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/

相关文章:

java - Java 3D 中表面的每一面是否可以有不同的颜色?

java - 使用 morphia 执行 $elemMatch 查询时如何进行数值比较

java - 如何在 Java 中进行隐形 ssl 握手

mysql - 如何在表上添加 ON DELETE 约束?

mysql - 按 ID 对结果进行分组并在 MySql 上将多条记录显示在一行中

datetime - 将格式为 rfc822 的日期时间复制到 redshift 中

java - Android 字符串格式不起作用

java - Servlet : lock file not released 中的 HSQL 数据库

MySQL 将两个表与另一个字段的最大值连接起来

vb.Net时间跨度计算