我用这段代码按日期搜索:
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中按日期搜索的正确方法是什么?
1条答案
按热度按时间7qhs6swi1#
字符串
工作很好 * 除了 * 它包括一个额外的午夜。
在MySQL/MariaDB中,我更喜欢这个公式:
型
当然,你可以在你的应用代码中预先计算这两个日期。
此外,注意
'2023-12-04'
和'2023-12-04 00:00:00'
是相同的文字。旁注:一个
PRIMARY KEY
是一个UNIQUE
。所以,你的UNIQUE(id)
是冗余的,可以被丢弃。