# JDBC DB2 Zugriff



## winniwinter (15. Juli 2005)

Hallo, ich habe mir ein programm geschrieben, das auf 2 DB2 server connecten soll, eine Abfrage startet und dabei gleichzeitig die Zeit mist, bis die Abfrage zu ende ist. 
Habe das in eine Schleife gepackt um einen Durchschnittswert zu ermitteln. Der Zugriff und das Messen der Zeit klappen bisher ganz gut. Jedoch ist das Problem, das der 1. Durchlauf immer länger dauert als der 2. Auch wenn ich 2mal den selben Server teste! Und das leuchtet mir einfach nicht ein. Hier einmal das Programm: 

//Klasse Zeit 
Hiermit kann ich die Zeit stoppen 

```
public class Zeit 
{ 
        double starttime; 
        double endtime; 
        double elapsed; 
        
        public void start() 
        { 
                starttime = System.currentTimeMillis(); 
        } 
        
        public void end() 
        { 
                endtime = System.currentTimeMillis();                
        } 
        
        public double summe()        
        { 
                elapsed = endtime - starttime; 
                return elapsed; 
        } 


}
```



```
//Klasse Vars 
Hier ist der Datenbankzugriff und die Treiber gespeichert 
Java: 

import java.sql.*; 
import java.io.*; 

public class Vars 
{ 
        
        Statement smt = null; 
        ResultSet rst = null;                
        Connection con = null;        
        String driver = null;        
        String sql1 = "SELECT * FROM DB2INST.KUNDEN";        
        String url = null; 
        String pwd = null; 
        String usr = null; 
        
        public Vars(String pDrvr, String purl) 
        { 
                driver = pDrvr;                
                url    = purl;                

                
                try 
                { 
                        Class.forName(driver).newInstance(); 
                        con = DriverManager.getConnection(url);                                                
                } 
                
                
                catch(Exception ex) 
                { 
                        System.out.println(ex); 
                } 
        }        
        
        public void zugriff() 
        { 
                try 
                { 
                        smt = con.createStatement(); 
                        rst = smt.executeQuery(sql1); 

                        
                } 
                
            catch(SQLException ex)                                                      
            { 
              System.err.println("SQLException information"); 
              while(ex!=null) { 
                System.err.println ("Error msg: " + ex.getMessage()); 
                System.err.println ("SQLSTATE: " + ex.getSQLState()); 
                System.err.println ("Error code: " + ex.getErrorCode()); 
                ex.printStackTrace(); 
                ex = ex.getNextException(); 
              } 
            } 
        } 
}
```



```
//Main Klasse 
Java: 


public class main 
{ 
        static int loop = 100; 
        

        
        
        public static void main(String[] args) 
        {                
                Zeit z1 = new Zeit(); 
                Vars var1 = new Vars("com.ibm.db2.jcc.DB2Driver", "jdbc:db2://host:port/MYDB:user=user;password=passwort;"); 
                Vars var2 = new Vars("com.ibm.db2.jcc.DB2Driver", "jdbc:db2://host:port/MYDB:user=user;password=passwort;"); 
                
                z1.start(); 
                for(int i=0;i<= loop;i++) 
                {                        
                        var1.zugriff();                        
                }                
                
                
                z1.end(); 
                double durchschnitt =z1.summe() / loop;                
                System.out.println("1. Server: " +durchschnitt+ " ms"); 
                
                
                z1.start(); 
                for(int i=0;i<= loop;i++) 
                {                        
                        var1.zugriff();                
                } 
                z1.end(); 
                durchschnitt =z1.summe() / loop; 
                
                System.out.println("2. Server: " +durchschnitt+ " ms"); 
        } 

}
```



Also nochmal kurz zusammengefasst. var1 braucht immer länger als var2. Selbst wenn var1 und var2 auf den selben server zugreifen. Und ich weiss einfach nicht warum. 
Ziel ist es einfach später in Erfahrung zu bringen um wieviel es schneller ist, Daten auf einem extra Server leseoptimiert bereitzustellen. 

Wäre sehr über eure Hilfe glücklich


----------



## Oparaga (18. Juli 2005)

In deiner Main-Klasse rufst du die Methode "Zugriff" auch beim zweiten Versuch von Var1 auf. Der zweite Aufruf, bzw. das zweite Auslesen aus der Datenbank ist immer schneller.


----------



## winniwinter (18. Juli 2005)

hi, danke für deine antwort. Und was würdest du mir dann empfehlen, wie ich das problem lösen könnte


----------



## Oparaga (18. Juli 2005)

Ersetz in deiner Main-Mathode beim Testen deines zweiten Servers Var1 mit Var2, und versuch's nochmal.


----------

