# Exception in thread "main" java.lang.OutOfMemoryEr



## märliprinz (8. Nov 2005)

```
import java.sql.*; 

public class ConnectionTest { 

	public static void main(String[] args) { 
		//Verbindungsaufbau Einträge die benötigt werden,
		//um mit einer Datenbank zu verbinden.
		final String hostname = "localhost"; 
		final String port = "8086"; 
		final String dbname = "cursor_test"; 
		final String user = "root"; 
		final String password = "";
		
		Connection conn = null;
		
		//Hier wird der Treiber geladen.
		try { 
			System.out.println("Treiber laden"); 
			Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
		}

		//Wenn der Treiber nicht geladen werden konnte, wird eine Exception ausgegeben.
		catch (Exception e) { 
			System.err.println("Treiber laden fehlgeschlagen!"); 
			e.printStackTrace(); 
		}

		//Hier wird mit der Datenbank connectet.
		try { 
			System.out.println("Verbindung aufbauen"); 
			String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; 
			conn = DriverManager.getConnection(url, user, password);
			
			Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
				     ResultSet.CONCUR_READ_ONLY);
			ResultSet srs = stmt.executeQuery("SELECT * FROM tbl_person ORDER BY id");
			
			int[] rows = {1, 2, 3, 4, 5, 6, 7, 9093, 34040};
			for(int i=0;i<rows.length;i++){
				if(srs.absolute(rows[i])){
					String name = srs.getString("name");
					String vorname = srs.getString("vorname");
					String adresse = srs.getString("adresse");
					System.out.println("Datensatz " +rows[i] +": " +name +" " +vorname +" " +adresse);
				}else{
					System.out.println("Datensatz nicht vorhanden!");
				}
			}

			srs.close();
			stmt.close();
			
			//Hier wird die Verbindung mit der DB beendet.
			System.out.println("Verbindung beenden"); 
			conn.close(); 
		}
		
		//Hier werden falls etwas schief geht die Fehlermeldungen ausgegeben.
		catch (SQLException sqle) { 
			System.out.println("SQLException: " + sqle.getMessage()); 
			System.out.println("SQLState: " + sqle.getSQLState()); 
			System.out.println("VendorError: " + sqle.getErrorCode()); 
			sqle.printStackTrace(); 
		}
	}  
}
```

Wenn ich dieses Programm laufen lasse, bekomme ich diese Fehlermeldung:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

_Ich benutze eine MySQL Datenbank und diesen JDBC Treiber: mysql-connector-java-3.1.11_


----------



## KSG9|sebastian (8. Nov 2005)

Wo wird die exception geworfen ? Welche Zeile ? Wieviel heap-space gibst du der VM ?


----------



## märliprinz (8. Nov 2005)

KSG9|sebastian hat gesagt.:
			
		

> Welche Zeile ?



Zeile 36 :roll:



			
				KSG9|sebastian hat gesagt.:
			
		

> Wieviel heap-space gibst du der VM ?



Default ist 64M ich habe dieser VM 128M gegeben.


----------



## Mag1c (8. Nov 2005)

Hi,

wieviele Spalten hat die Tabelle ? Und wieviele Datensätze insgesamt ?

Gruß
Mag1c


----------



## märliprinz (8. Nov 2005)

Mag1c hat gesagt.:
			
		

> Hi,
> wieviele Spalten hat die Tabelle ? Und wieviele Datensätze insgesamt ?



Hallo Mag1c :applaus: 

Die Tabelle hat elf Spalten und eine Million Datensätze...


----------



## Mag1c (8. Nov 2005)

Hi,

 :roll:  ohh, muß es wirklich ein "SELECT *" sein ? Scheinbar hat der mysql-Treiber mit der Datenmenge ein Problem. Evtl. kannst du mit stmt.setFetchSize(...) was drehen ... keine Ahnung.

Gruß
Mag1c


----------



## Bleiglanz (8. Nov 2005)

mach mal 

stmt.setFetchSize(100)

oder sowas (kann aber sein, dass das bei mysql nix bringt)

ansonsten liest du ca. 34000 Datensätze, das braucht schon was...


----------



## märliprinz (9. Nov 2005)

Bleiglanz hat gesagt.:
			
		

> mach mal
> 
> stmt.setFetchSize(100)



Wie meinst du das? Sorry falls dies eine blöde Frage ist, aber ich bin noch JAVA Anfänger...


----------



## märliprinz (9. Nov 2005)

Mag1c hat gesagt.:
			
		

> Hi,
> 
> :roll:  ohh, muß es wirklich ein "SELECT *" sein ? Scheinbar hat der mysql-Treiber mit der Datenmenge ein Problem. Evtl. kannst du mit stmt.setFetchSize(...) was drehen ... keine Ahnung.



Hey Mag1c wie meinst du das? gibts eine andere Möglichkeit als "SELECT *"?  :bahnhof:


----------



## märliprinz (9. Nov 2005)

Ou... hat sich erledigt, ich denke ich habe verstanden was setFetchSize bewirkt.


----------

