2015-09-21 4 views
0

Я экспериментирую с необработанными результатами с помощью HSQLDB 2.3.3.
Моя схема таблицы является:SQL select statement в HSQLDB с предложением 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"}   

программа My Java использует следующий класс (который расширяет Spring Framework 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) 
+0

Извините, я попытался изолировать свою проблему в HSQLDB, но я сделал глупую ошибку. Я только что закончил сообщение с программой Java, где моя проблема началась. –

ответ

0

Проблема заключается в моем использовании Spring JDBC и не HSQLDB.
В DefaultJobManager класса (который расширяет JdbcDaoSupport), я использовать более чем один класс, который расширяет RdbmsOperation и в некоторых из них я установить maxRows свойство 1, но это свойство распространяется к соответствующему свойству JdbcTemplate объекта, и я разделяю экземпляр JdbcTemplate, принадлежащий объекту DefaultJobManager с всеRdbmsOperation объектов.
Другие свойства распространяются от RdbmsOperation до JdbcTemplate: fetchSize и queryTimeout.
Если вы хотите сделать некоторые настройки на объекте RdbmsOperation, вы должны позволить ему использовать свой экземпляр по умолчанию JdbcTemplate. Вы можете совместно использовать объект DataSource среди объектов RdbmsOperation, но не объект JdbcTemplate.

Смежные вопросы