我使用HSQLDB 2.3.3来实验未预期的结果。
我的表架构是:HSQLDB中的SQL select语句和where子句
CREATE TABLE job_schedule (
job_id BIGINT NOT NULL PRIMARY KEY,
job_name VARCHAR(36) NOT NULL,
job_group VARCHAR(36) NOT NULL,
job_start BIGINT NOT NULL,
job_data VARCHAR(255) NULL,
job_body CLOB NULL)
CREATE UNIQUE INDEX idx_job_schedule_name ON job_schedule
(job_name, job_group)
我使用HSQL数据库管理器来选择表中的所有行:
SELECT * FROM job_schedule
JOB_ID JOB_NAME JOB_GROUP JOB_START JOB_DATA JOB_BODY
------ ------------------------------------ ------------------------------------ ------------- ------------------------------------------------------------------------------------------------------------ --------
79 cb9b5abe-f6b6-4670-a702-5bec4f6b9217 edab5d78-3533-11e5-a151-feff819cdc9f 1442848923391 {"duration":69,"start":0,"channel":"ba981e18-e2d8-42ce-a7af-147ff40f075f","content":"360449L0E0ZqbNnH.mp4"}
80 a0e49194-c01c-4c77-ac4c-95f60bd3528b edab5d78-3533-11e5-a151-feff819cdc9f 1442848866000 {"duration":57,"start":0,"channel":"ba981e18-e2d8-42ce-a7af-147ff40f075f","content":"294913LWi2e1RuY9e.mp4"}
我的Java程序使用下面的类(即延伸的Spring框架4.2.0类):
@Transactional(propagation = Propagation.REQUIRED)
public class DefaultJobManager extends JdbcDaoSupport {
private DefaultJobManager.QueryIdSql myQueryIdSql;
@Override
protected void initTemplateConfig() {
JdbcTemplate db = getJdbcTemplate();
myQueryIdSql = new DefaultJobManager.QueryIdSql(db);
}
@Transactional(readOnly = true)
public List<Long> listJobs(long startMin, long startMax) {
return myQueryIdSql.execute(startMin, startMax);
}
private static final class QueryIdSql extends MappingSqlQuery<Long> {
QueryIdSql(JdbcTemplate db) {
setJdbcTemplate(db);
setSql("select job_id from job_schedule " +
"where job_start between ? and ?");
setResultSetType(ResultSet.TYPE_FORWARD_ONLY);
setUpdatableResults(false);
declareParameter(new SqlParameter(Types.BIGINT));
declareParameter(new SqlParameter(Types.BIGINT));
compile();
}
protected Long mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getLong(1);
}
}
listJobs(1442848866000L, 1442848923391L)
只有一个项目返回List
的方法。
的HSQLDB产生db.sql.log
文件,在这个文件中,我可以读到:
select job_id from job_schedule where job_start between ? and ? (1442848866000,1442848923391)
对不起,我试图隔离我在HSQLDB中的问题,但我犯了一个愚蠢的错误。我刚刚完成了我的问题已经开始的Java程序的帖子。 –