Hilfe ich bastel nur unperformantes

Gape

Grünschnabel
Hi,

wie könnte man diesen Code intelligenter programmieren, ohne ihn absichtlich in eine Exception rennen zu lassen um ihn dann wieder aufzufangen.
Bei der Ausführung braucht der Rechner zu lange ;).

Die Methode soll aus einem ResultSet ein String machen, ohne die Anzahl der Spalten zu kennen.

Was mir spontan einfällt ist das ich das "zählen" der Spalten mit der Exception nur einmal mache, aber das kann ja auch nicht die Lösung sein.

Code:
	public String getCap(String day)
	{
		String sql  = "select * from bla where day ='" + day + "'";
		connect();
		String all =  ""; 
		
		try {
			ResultSet rs ; 
			rs = connection.executeQuery(sql);
			while (rs.next())
			{
				int counter = 1;
				while(true)
					try{
						all  += rs.getString(counter++) + ";";
					}catch(Exception e)
					{
						break;
					}
					all += "\n";	
			}
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return all; 
	}
 
Wenn du eine unbekannte Anzahl von Strings in einer Schleife konkatenieren willst, dann nutze bitte einen StringBuilder und nicht direkt einen String. Das ist schonmal unendlich langsam.

Um die Anzahl der Spalte rauszukriegen kannst du resultSet.getMetaData().getColumnCount() verwenden.

Ein resultSet sollte man auch wieder closen. Und das im finally Block, damit dies auch bei einer Exception durchgeführt wird. Gleiches für die Connection.

Noch der Hinweis: http://www.tutorials.de/forum/java-...tenbankzugriff-mit-springs-jdbc-template.html
 
Vielen Dank.
Gleich mehre Fehlgriffe also ;)


Krass. Das mit dem SpringBuilder bringts echt ;)
 
Zuletzt bearbeitet:
Falls deine Methode öfters aufgerufen wird, ist ein Prepared Statement sinnvoll.
Ausserdem solltest du die Connection nicht jedesmal neu aufbauen sondern einfach offenlassen.

Ausserdem kannst du dir überlegen ob ein Cache sinnvoll wäre (WeakHashMap o.ä.).

Oder einfach einmal beim ersten Aufruf die ganze Tabelle lesen und gleich in einer Map halten und von dort aus die Ergebnisse lesen. Das geht aber nur falls die Tabelle nicht besonders groß wird bzw. sich die Daten nicht großartig ändern und dein Use Case auch mit diesen evtl. veralteten Offline Daten zufrieden ist.
 

Neue Beiträge

Zurück