# Datensatzeinschränkung in JdbcTemplate



## Presler (11. Mai 2012)

Wie kann ich mit JdbcTemplate eine Datenabfrage eingrenzen? 
Die Funktion setMaxRows( x ) von JdbcTemplate grenzt zwar die Anzahl der Datensätze ein. Aber setFetchRow( x ) scheint keinen Effekt zu zeigen. Lt. 

JdbcTemplate (Spring Framework API 2.0))

und

Statement (Java 2 Platform SE 5.0)

müsste ja gelten

0 <= setFetchRow( a ) <= setMaxRows( b )

also  sql = ".... LIMIT a, b"

Benutze ich aber 


```
DriverManagerDataSource ds = new DriverManagerDataSource();

	       ds.setUsername("root");
	       ds.setPassword("");
	       ds.setDriverClassName("com.mysql.jdbc.Driver");
	       ds.setUrl("jdbc:mysql://localhost/proconf");
	       
	       JdbcTemplate jdbc = new JdbcTemplate( ds );

	       jdbc.setFetchSize( 3 );
	       jdbc.setMaxRows( 2 );
	       
	       System.out.println( jdbc.queryForList("SELECT * FROM component") );
```

so wird mir aus einer Datentabelle von 6 Datenzeilen
nur die ersten beiden Datenzeilen ausgegeben. setFetchSize() scheint keinen Effekt zu zeigen.

Geht demzufolge die Einschränkung nur durch direktes "LIMIT" setzen in der SQL - Anweisung?


----------



## SlaterB (11. Mai 2012)

Fetch hat maximal damit zu tun, wieviele Ergebnisse aufeinmal aus der DB geladen und zwischengespeichert werden,
wirkt sich nicht auf die Anzahl der Ergebnisse aus, nur zur Performance

zu MaxRows gibts kein Gegenstück, das stimmt, 
für MaxRows wird anscheinend auf den Rest der Ergebnisse verzichtet, ziemlich simpel,
müsste der Logik nach auch am Anfang funktionieren, paar auslassen, aber wohl nicht vorhanden

mit LIMIT in einer SQL-Query ist das nicht direkt vergleichbar


----------



## Gast2 (11. Mai 2012)

Es ist meiner Meinung aber nach aber ziemlich sinn frei LIMIT im SQL wegzulassen und dafür im Treiber oder der Applikation zu einzuschränken. Die Datenbank hat da definitiv die beste Performance die Ergebnisse vorzusortieren, filtern und limitieren.


----------

