2012-03-30 12 views
5

Utilizzo l'interfaccia Spring JdbcTemplate per il recupero dei dati da un database MS SqlServer. Nella documentazione che vedo c'è il metodo setMaxRows() per impostare un limite per tutte le query, ma cosa succede se voglio limitare solo una selezione?Spring JdbcTemplate: come limitare le righe selezionate?

C'è un modo per impostare un limite solo per una query richiamata specifica in un modo "configurabile"?

+0

Che ne dici di utilizzare il tuo PreparedStatementCreator per tali istruzioni e chiamare Statement.setMaxRows() durante la creazione dell'istruzione preparata? –

+0

@a_horse_with_no_name mi sembra un'ottima idea, puoi fornirmi un esempio di utilizzo di 'PreparedStatementCreator', sono nuovo di Spring ... – davioooh

+1

Sono nuovo per Spring, altrimenti avrei aggiunto una risposta con un esempio:) –

risposta

2

La limitazione del set di risultati di una query specifica può essere eseguita inserendo il limite direttamente nella query. Consultare la documentazione del fornitore DB per verificare se supporta ad esempio LIMIT.

Esempio su MySQL: SELECT * FROM EMPLOYEE LIMIT 10

+0

Oppure 'SELEZIONA * DA DIPENDENTE DOVE ROWNUM <10' in caso di Oracle. – adarshr

+0

@jabal sì, lo so, ma nella mia implementazione del metodo, il limite è facoltativo, quindi, se devi limitare la query direttamente usando SQL, devi scrivere due query diverse ... – davioooh

+0

In questi casi di solito costruisco il stringa di query nel mio codice che gestisce i casi "limite o no-limit" in modo diverso e quindi eseguirlo. Non conosco una soluzione migliore, curioso se qualcuno lo fa .. :-) – jabal

4

Alcuni linguaggi di query SQL basato (derby) non supporta LIMIT parola chiave. Quindi non puoi usare LIMIT in query direttamente. Utilizzando Spring JDBC Template possiamo impostare il numero massimo di righe necessarie attraverso setMaxRows(Integer intvalue)

jdbcTemplate.setMaxRows(1); 
1

È inoltre possibile limite di parole chiave utente in query. vedi sotto interrogazione

select * from FileShare limit 3 offset 3 

se il limite di applicazione e l'offset possono essere assegnare dinamicamente dall'utente l'uso al di sotto di query

@Autowired 
private JdbcTemplate template; 

public JdbcTemplate getTemplate() { 
    return HibernateUtil.getJdbcTemplate(); 
} 

public List<FileShare> getAllSharedFiless(int limit,int offset) 
      throws ShareMeException { 
String query="select * from FileShare limit ? offset ?"; 
     return getTemplate().query(query, 
       new SharedFilesRowMapper(), 
       new Object[]{limit,offset}); 

} 

Ecco FileShare è un nome della tabella e SharedFilesRowMapper è rowMapper che elencano le righe dalla tabella.

Problemi correlati