# JDBC Treiber



## märliprinz (3. Nov 2005)

Kann mir jemand sagen welche Datenbank und welcher JDBC-Treiber das Blättern (mit Blättern meine ich: Cursor rauf, runter oder, eine bzw. mehrere beliebige/n Zeile/n  anzeigt) unterstützt? :roll:


----------



## thE_29 (3. Nov 2005)

falsches Forum... (umgemoved)


----------



## Dukel (4. Nov 2005)

märliprinz hat gesagt.:
			
		

> Kann mir jemand sagen welche Datenbank und welcher JDBC-Treiber das Blättern (mit Blättern meine ich: Cursor rauf, runter oder, eine bzw. mehrere beliebige/n Zeile/n  anzeigt) unterstützt? :roll:



Im Programm blättern oder in der Datenbank?
Ich glaube das Blättern musst du selber Implementieren.


----------



## märliprinz (4. Nov 2005)

märliprinz hat gesagt.:
			
		

> Im Programm blättern oder in der Datenbank?



In der Datenbank... aber auch im Programm. :bahnhof: 

Aber meine Frage war, ob es einen JDBC-Treiber dafür gibt und welche DB diese Funktionen (Rauf, Runter und Auswahl) unterstützt.


----------



## Bleiglanz (4. Nov 2005)

fast alle

nimm mysql, oder hsql oder derby zum anfangen


----------



## märliprinz (4. Nov 2005)

ok danke, ich werde es mal versuchen...


----------



## märliprinz (14. Nov 2005)

Also ich habe diese Aufgabe nun gelöst. mit den meisten neuen Versionen des JDBC Treiber, ist das insensitiv-scrolling möglich. doch bei einer Million Datensätze geht es ca. eine halbe minute um diese anzuzeigen.... was ja nicht gerade super ist.


----------



## Bleiglanz (14. Nov 2005)

pff

wie "zeigst" du sie denn an?


----------



## märliprinz (14. 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);
			
			//Variabeln die benötigt werden um die RAM benutzung so wie auch die Zeit zu messen.
			long startTime = System.currentTimeMillis();
			long memFreeVorher = Runtime.getRuntime().freeMemory();
			long memFreeMax = Runtime.getRuntime().maxMemory();
			long memFreeTotal = Runtime.getRuntime().totalMemory();
						
			Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
				     ResultSet.CONCUR_READ_ONLY);
			ResultSet srs = stmt.executeQuery("SELECT * FROM tbl_person");
			
			/*srs.first();
			while (srs.next()) {
				String name = srs.getString("name");
				System.out.println("name = "+name);
			}*/

		//	int[] rows = {""};
		//	for(int i=0;i<rows.length;i++){
			for(int i=1;i<=1000000;i++){
				if(srs.absolute(i)){
					String name = srs.getString("name");
					String vorname = srs.getString("vorname");
					String adresse = srs.getString("adresse");
					System.out.println("Datensatz " +i +": " +name +" " +vorname +" " +adresse);
				}else{
					System.out.println("Datensatz nicht vorhanden!");
				}
			}

			srs.close();
			stmt.close();
			
			long memFreeNachher = Runtime.getRuntime().freeMemory();
			long endTime = System.currentTimeMillis();
			
			System.out.println("habe " + (endTime-startTime) + "[ms] Zeit verbraucht");
			System.out.println("------------------------------------------");
			System.out.println("Freier Speicher vorher " + (memFreeMax/1024/1024) + ", freier Speicher nachher " + (memFreeNachher/1024/1024));
			System.out.println(memFreeMax/1024/1024);
			System.out.println(memFreeTotal/1024/1024);
			
			/*	System.out.println("Statement beginnen"); 
			Statement stmt = conn.createStatement(); 
			System.out.println("Abfrage beginnen"); 
			String sqlCommand = "SELECT * FROM tbl_person ORDER BY name ASC"; 
			//"SELECT * FROM tbl_person WHERE id<=5 ORDER BY name ASC"; 
			ResultSet rs = stmt.executeQuery(sqlCommand); 
			System.out.println("* Ergebnisse anzeigen"); 
			
			while (rs.next()) { 
				int id = rs.getInt(1); 
				String name = rs.getString("name"); 
				String vorname = rs.getString(3); 
				System.out.println( id+" "+name+" "+vorname ); 
			} 

			System.out.println("* Statement beenden"); 
			stmt.close();
		*/
			//Hier wird die Verbindung zur 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(); 
		}
	}  
}
```


----------



## Bleiglanz (14. Nov 2005)

LOL

du kannst doch nicht im ernst eine Million Datensätze auf die Konsole ausgeben, die ist nun mal langsam 

und warum nimmst du ein scrollable resultset wenn du dann  for(int i=1;i<=1000000;i++){  machst?


----------



## märliprinz (14. Nov 2005)

weil ich es anders nicht kann :roll: 

der chef wollte dies so haben, keine ahnung weshalb er 1000000 Datensätze auslesen möchte.... :bahnhof:


----------



## Bleiglanz (15. Nov 2005)

a) wenn du nur "vorwärts gehts", dann nimm ein FORWARD_ONLY und marschiere mit rs.next() durch

b) schreibs mal in ein File, sollte schneller sein als die Ausgabe auf Konsole...


----------

