Einschränkung von Suchergebnissen, wie am besten?

Bouyo

Mitglied
Ich möchte eine Funktion schreiben die mir aus einer Datensatzmenge einen bestimmten Ausschnitt zurückliefert. Aber wie realisiere ich soetwas mit Spring am besten?

Pseudocode:
Code:
public List<myTable> gets(int offset, int count) {
         String sql = "SELECT * FROM mytable LIMIT " + offset + ", " + count;
			 
         List<myTable> mytable = getSimpleJdbcTemplate().query(sql, ParameterizedBeanPropertyRowMapper.newInstance(MyTable.class));

        return mytable;
]

Ich könnte zwar "LIMIT" im SQL - Statment verwenden. Dieses wäre zwar wohl das effizienteste, ich weis nur nicht ob "LIMIT", das aus MySQL stammt, Standardisiert ist, also auch für andere Datenbanken gilt.

Eine andere alternative wäre setMaxRows() zu verwenden, womit ich zwar die maximalste Anzahl der Zeilen angeben kann, aber wie definiere ich den Offset, also den Startpunkt ab dem gelesen werden soll.

Deshalb meine Frage wie realisiere ich eine effiziente Art um auf aus einer Liste von 30 Mio Datenstäze ab einem bestimmten Datenzeile + n Datenzeile auslese?
 

Bouyo

Mitglied
Erstmal herzlichen Dank für deine Antwort. Das in deinem besagten Link habe ich zwar verstanden. Was ich noch nicht verstanden habe wie kann ich das in meiner Spring Klasse realisieren?

Code:
public class MyTableDAO extends SimpleJdbcDaoSupport {
          .... 
          public List<MyTable> gets(int offset, int count) {
                   String sql = "SELECT * FROM mytable";
	     ???		 
	     List<MyTable> mytables = 
				getSimpleJdbcTemplate().query(sql, ParameterizedBeanPropertyRowMapper.newInstance(MyTable.class));
			
	     return mytables;
	}
}
 

Bouyo

Mitglied
Aus Spring Doku:
Set the fetch size for this JdbcTemplate. This is important for processing large result sets: Setting this higher than the default value will increase processing speed at the cost of memory consumption; setting this lower can avoid transferring row data that will never be read by the application.

Fetch setzt demzufolge die Cache größe, nicht den Offset. Wie setze ich den Offset, sprich ab wo gelesen werden soll?
 

Neue Themen


Oben