正确的方式做一个搜索的日期java玛丽亚DB

1wnzp6jl  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(139)

我用这段代码按日期搜索:

public List<DocumentManagerDTO> getDocumentManager(java.sql.Date fromDateInclusive, java.sql.Date toDateInclusive) {
        String query = "select * from document_manager where dataReferencia >= ? and dataReferencia <= ?";
        
        QueryRunner run = new QueryRunner();
        
        ResultSetHandler<List<DocumentManagerDTO>> h = new BeanListHandler<DocumentManagerDTO>(DocumentManagerDTO.class);

        List<DocumentManagerDTO> docsToRet = null;
        try {
            docsToRet = run.query(conn, query, h, fromDateInclusive, toDateInclusive);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return docsToRet;
    }

字符串
这个想法是安装这个查询,例如:

select * from document_manager where dataReferencia >= '2023-12-04' and dataReferencia <= '2023-12-18'


在MySQL工作台中,它可以正常工作,它返回一个DocumentManager列表,
但是当我运行java时,我得到了这个错误:

java.sql.SQLException: Out of range value for column 'dataReferencia' : value 2023-12-08 00:00:00 Query: select * from document_manager where dataReferencia >= ? and dataReferencia <= ? Parameters: [2023-12-06, 2023-12-20]
    at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:363)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:350)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:211)
    at infoasset.mining.connection.DBInterface.getDocumentManager(DBInterface.java:188)
    at infoasset.mining.fnet.ProcessXML.processXMLs(ProcessXML.java:100)
    at infoasset.mining.entry.EntryPointMining.main(EntryPointMining.java:24)


但字段dataReferencia是DATETIME字段
请参见为documentManager创建表格:

CREATE TABLE `document_manager` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `descriptionDocument` varchar(500) DEFAULT NULL,
  `dataReferencia` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2739 DEFAULT CHARSET=latin1


在java/mariadb中按日期搜索的正确方法是什么?

7qhs6swi

7qhs6swi1#

where dataReferencia >= '2023-12-04'
  and dataReferencia <= '2023-12-18'

字符串
工作很好 * 除了 * 它包括一个额外的午夜。
在MySQL/MariaDB中,我更喜欢这个公式:

WHERE dataReferencia >= '2023-12-04'
  AND dataReferencia  < '2023-12-04' + INTERVAL 4 DAY


当然,你可以在你的应用代码中预先计算这两个日期。
此外,注意'2023-12-04''2023-12-04 00:00:00'是相同的文字。
旁注:一个PRIMARY KEY是一个UNIQUE。所以,你的UNIQUE(id)是冗余的,可以被丢弃。

相关问题