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

1wnzp6jl  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(171)

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

  1. public List<DocumentManagerDTO> getDocumentManager(java.sql.Date fromDateInclusive, java.sql.Date toDateInclusive) {
  2. String query = "select * from document_manager where dataReferencia >= ? and dataReferencia <= ?";
  3. QueryRunner run = new QueryRunner();
  4. ResultSetHandler<List<DocumentManagerDTO>> h = new BeanListHandler<DocumentManagerDTO>(DocumentManagerDTO.class);
  5. List<DocumentManagerDTO> docsToRet = null;
  6. try {
  7. docsToRet = run.query(conn, query, h, fromDateInclusive, toDateInclusive);
  8. } catch (SQLException e) {
  9. e.printStackTrace();
  10. }
  11. return docsToRet;
  12. }

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

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


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

  1. 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]
  2. at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:363)
  3. at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:350)
  4. at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:211)
  5. at infoasset.mining.connection.DBInterface.getDocumentManager(DBInterface.java:188)
  6. at infoasset.mining.fnet.ProcessXML.processXMLs(ProcessXML.java:100)
  7. at infoasset.mining.entry.EntryPointMining.main(EntryPointMining.java:24)


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

  1. CREATE TABLE `document_manager` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `descriptionDocument` varchar(500) DEFAULT NULL,
  4. `dataReferencia` datetime DEFAULT NULL,
  5. PRIMARY KEY (`id`),
  6. UNIQUE KEY `id_UNIQUE` (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=2739 DEFAULT CHARSET=latin1


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

7qhs6swi

7qhs6swi1#

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

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

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


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

相关问题