# connection übergeben



## Marco_adv (14. Dez 2006)

Hallo ich habe datenbank zugriffe und eine connect klasse geschrieben connect sieht wie folgt aus:


```
public class DatabaseConnection {

	private Connection connection = null;

	public DatabaseConnection(String driver, String url, String user, String password) throws SQLException, ClassNotFoundException {
		openConnection(driver, url, user, password);
	}

	/**
	 * Disconnect from the SCM database.
	 * @throws SQLException
	 */
	public void disconnect() throws SQLException {
		closeConnection();
	}

	private void openConnection(String driver, String jdbcURL, String user, String password) throws SQLException, ClassNotFoundException {
    	if(connection != null) {
    		closeConnection();
    	}
    	Class.forName(driver);
    	connection = DriverManager.getConnection(jdbcURL, user, password);
    	connection.setAutoCommit(false);
    }

    private void closeConnection() throws SQLException {
    	if(connection != null) {
    		connection.rollback();
    		connection.close();
    	}
    }
}
```

die statments so:

```
public class V3CRPRUSStatements {


	Connection connection = null;

	private PreparedStatement userInsert = null;

	private PreparedStatement userDelete = null;

	private PreparedStatement userupdate = null;

	private PreparedStatement getLastName = null;

	private PreparedStatement getFirstName = null;

	private PreparedStatement getEmailAdress = null;


	public V3CRPRUSStatements() {

	}

	public void deleteUser(UserDescription user) throws SQLException {
		if (userDelete == null) {
			userDelete = connection
					.prepareStatement("delete from v3crprus where "
							+ "USER_ID=?");
		}
		userDelete.setString(1, user.getUserId());
		userDelete.executeUpdate();
	}

	public void insertUser(UserDescription user) throws SQLException {
		if (userInsert == null) {
			userInsert = connection.prepareStatement("insert into v3crprus("
					+ "USER_ID, LAST_NAME, FIRST_NAME, EMAIL_ADDRESS"
					+ ") values( ?, ?, ?, ?) ");
		}
		userInsert.setString(1, user.getUserId());
		userInsert.setString(2, user.getLastName());
		userInsert.setString(3, user.getFirstName());
		userInsert.setString(4, user.getEMailAdress());
		userInsert.executeUpdate();
	}

	public void updateUser(UserDescription user) throws SQLException {
		if (userupdate == null) {
			userupdate = connection
					.prepareStatement("update v3crprus set LAST_NAME=?, FIRST_NAME=?, EMAIL_ADDRESS=?"
							+ "where USER_ID=?");

		}
		userupdate.setString(4, user.getUserId());
		userupdate.setString(1, user.getLastName());
		userupdate.setString(2, user.getFirstName());
		userupdate.setString(3, user.getEMailAdress());
		userupdate.executeUpdate();
	}

	public String getFirstName(String userId) throws SQLException {
		String returnValue = null;
		if (getFirstName == null) {
			getFirstName = connection
					.prepareStatement("select FIRST_NAME from v3crprus where USER_ID=?");
			getFirstName.setString(1, userId);
			ResultSet result = getFirstName.executeQuery();
			if (result != null) {
				if (result.next()) {
					returnValue = result.getString("FIRST_NAME");
				}
			}
		}
		return returnValue;
	}

	public String getEMailAdress(String userId) throws SQLException {
		String returnValue = null;
		if (getEmailAdress == null) {
			getEmailAdress = connection
					.prepareStatement("select EMAIL_ADDRESS from v3crprus where USER_ID=?");
			getEmailAdress.setString(1, userId);
			ResultSet result = getEmailAdress.executeQuery();
			if (result != null) {
				if (result.next()) {
					returnValue = result.getString("EMAIL_ADDRESS");
				}
			}
		}
		return returnValue;
	}

	public String getLastName(String userId) throws SQLException {
		String returnValue = null;
		if (getLastName == null) {
			getLastName = connection
					.prepareStatement("select LAST_NAME from v3crprus where USER_ID=?");
			getLastName.setString(1, userId);
			ResultSet result = getLastName.executeQuery();
			if (result != null) {
				if (result.next()) {
					returnValue = result.getString("LAST_NAME");
				}
			}
		}
		return returnValue;
	}
```

und nun möchte ich die connection irgendwie übergeben an die statments klasse dass die damit arbeiten kann.
kann mir da jemand helfen??

vielen dank marco


----------



## DaKo (14. Dez 2006)

Connection conn = new Connection(...);
:?:


----------



## The_S (14. Dez 2006)

Eine neue Instanz deiner Connection Klasse in der Statement klasse anlegen!? Bzw. über eine Methode eine bereits vorhandene Instanz deiner Connection Klasse übergeben. Oder hab ich da was falsch verstanden?


----------



## Azrahel (14. Dez 2006)

oder im Konstruktor 

```
public V3CRPRUSStatements(Connection con) { 

   }
```
übergeben


----------



## Marco_adv (14. Dez 2006)

im constructor versuch ichs auch grad is nur dumm dass in der klasse database connection keine prepared statements sind also die connection nicht gecastet werden kann oder?


----------



## The_S (14. Dez 2006)

Warum willst du denn casten?


----------



## Marco_adv (14. Dez 2006)

also wenn ich das mache in der main:

```
DatabaseConnection connection = new DatabaseConnection("driver","URL", "user", "passwort");
V3CRPRUSStatements statements = new V3CRPRUSStatements(connection);
```
und der Constructor so aussieht

```
public V3CRPRUSStatements(Connection connection) {
}
```

dann übergebe ich ja keine SQL connection und kann die preparedStatements nicht aus führen oder wie meint ihr das?

danke schon mal für die vielen antworten zu früher stunde


----------



## The_S (14. Dez 2006)

Übergeb doch die DatabaseConnection :shock:


----------



## Marco_adv (14. Dez 2006)

das mach ich hier doch


----------



## Azrahel (14. Dez 2006)

Verzeichung, sollte in dem Fall selbstverständlich lauten

```
public V3CRPRUSStatements(DatabaseConnection connection) { 
}
```

oder DatabaseConnection müsste von Connectionabgeleitet werden... würd ja auch gehen


----------



## Marco_adv (14. Dez 2006)

ich versteh einfach nicht so ganz was ihr meint meine Connection classe connected ja nur und erbt nich nicht java.sql.connection
sorry das ich so langsam bin


----------



## The_S (14. Dez 2006)

Deswegen soll dein Konstruktor ja auch ein Objekt der Klasse DatabaseConnection erwarten und nicht ein Connection objekt.


----------



## Azrahel (14. Dez 2006)

kein Problem.

Wenn du  das machst:
	
	
	
	





```
public V3CRPRUSStatements(Connection con) { 

   }
```
 darfst du nicht die DatabaseConnection übergeben sondern nur die Connection aus DatabaseConnection.

wenn du das machst:
	
	
	
	





```
public V3CRPRUSStatements(DatabaseConnection dbcon) { 

   }
```

musst du in V3CRPRUSStatements auf dbcon.getConnection():


 zugreifen, also in der Klasse DatabaseConnection  muss noch ein getter rein :

```
public Connection getConnection(){
return connection
}
```


----------



## Azrahel (14. Dez 2006)

Also so:

```
public class DatabaseConnection { 

   private Connection connection = null; 

   public DatabaseConnection(String driver, String url, String user, String password) throws SQLException, ClassNotFoundException { 
      openConnection(driver, url, user, password); 
   } 

   /** 
    * Disconnect from the SCM database. 
    * @throws SQLException 
    */ 
   public void disconnect() throws SQLException { 
      closeConnection(); 
   } 

   private void openConnection(String driver, String jdbcURL, String user, String password) throws SQLException, ClassNotFoundException { 
       if(connection != null) { 
          closeConnection(); 
       } 
       Class.forName(driver); 
       connection = DriverManager.getConnection(jdbcURL, user, password); 
       connection.setAutoCommit(false); 
    } 

    private void closeConnection() throws SQLException { 
       if(connection != null) { 
          connection.rollback(); 
          connection.close(); 
       } 
    } 
    public Connection getConnection(){
        return connection;
    }
}
```

und :

```
public class V3CRPRUSStatements { 


   Connection connection = null; 

   private PreparedStatement userInsert = null; 

   private PreparedStatement userDelete = null; 

   private PreparedStatement userupdate = null; 

   private PreparedStatement getLastName = null; 

   private PreparedStatement getFirstName = null; 

   private PreparedStatement getEmailAdress = null; 


   public V3CRPRUSStatements(DatabaseConnection cbcon) { 
        connection=dbcon.getConnection();
   } 

   public void deleteUser(UserDescription user) throws SQLException { 
      if (userDelete == null) { 
         userDelete = connection 
               .prepareStatement("delete from v3crprus where " 
                     + "USER_ID=?"); 
      } 
      userDelete.setString(1, user.getUserId()); 
      userDelete.executeUpdate(); 
   } 

   public void insertUser(UserDescription user) throws SQLException { 
      if (userInsert == null) { 
         userInsert = connection.prepareStatement("insert into v3crprus(" 
               + "USER_ID, LAST_NAME, FIRST_NAME, EMAIL_ADDRESS" 
               + ") values( ?, ?, ?, ?) "); 
      } 
      userInsert.setString(1, user.getUserId()); 
      userInsert.setString(2, user.getLastName()); 
      userInsert.setString(3, user.getFirstName()); 
      userInsert.setString(4, user.getEMailAdress()); 
      userInsert.executeUpdate(); 
   } 

   public void updateUser(UserDescription user) throws SQLException { 
      if (userupdate == null) { 
         userupdate = connection 
               .prepareStatement("update v3crprus set LAST_NAME=?, FIRST_NAME=?, EMAIL_ADDRESS=?" 
                     + "where USER_ID=?"); 

      } 
      userupdate.setString(4, user.getUserId()); 
      userupdate.setString(1, user.getLastName()); 
      userupdate.setString(2, user.getFirstName()); 
      userupdate.setString(3, user.getEMailAdress()); 
      userupdate.executeUpdate(); 
   } 

   public String getFirstName(String userId) throws SQLException { 
      String returnValue = null; 
      if (getFirstName == null) { 
         getFirstName = connection 
               .prepareStatement("select FIRST_NAME from v3crprus where USER_ID=?"); 
         getFirstName.setString(1, userId); 
         ResultSet result = getFirstName.executeQuery(); 
         if (result != null) { 
            if (result.next()) { 
               returnValue = result.getString("FIRST_NAME"); 
            } 
         } 
      } 
      return returnValue; 
   } 

   public String getEMailAdress(String userId) throws SQLException { 
      String returnValue = null; 
      if (getEmailAdress == null) { 
         getEmailAdress = connection 
               .prepareStatement("select EMAIL_ADDRESS from v3crprus where USER_ID=?"); 
         getEmailAdress.setString(1, userId); 
         ResultSet result = getEmailAdress.executeQuery(); 
         if (result != null) { 
            if (result.next()) { 
               returnValue = result.getString("EMAIL_ADDRESS"); 
            } 
         } 
      } 
      return returnValue; 
   } 

   public String getLastName(String userId) throws SQLException { 
      String returnValue = null; 
      if (getLastName == null) { 
         getLastName = connection 
               .prepareStatement("select LAST_NAME from v3crprus where USER_ID=?"); 
         getLastName.setString(1, userId); 
         ResultSet result = getLastName.executeQuery(); 
         if (result != null) { 
            if (result.next()) { 
               returnValue = result.getString("LAST_NAME"); 
            } 
         } 
      } 
      return returnValue; 
   }
```

Stimmt das so Hobbit?


----------



## Marco_adv (14. Dez 2006)

juhu so gehts vielen dank

gruß marco


----------



## The_S (14. Dez 2006)

Azrahel hat gesagt.:
			
		

> Stimmt das so Hobbit?



??? Warum fragst du mich, ob dein Code stimmt ???:L ?


----------



## Azrahel (14. Dez 2006)

weil du grad auch durchs Forum tobst und ebenfalls im Besitz der Macht bist  :wink: Und da ich mir grad nicht sicher war weil wegen man hätte ja auch ach egal... Tschuldige....


----------



## The_S (14. Dez 2006)

Du musst dich net entschuldigen, aber ich war ein bisschen überrascht von einem (imho) erfahrenen Java-Programmierer gefragt zu werden, ob das so stimmt :shock:


----------



## Azrahel (14. Dez 2006)

Das bekomm ich von dir gesagt?  :shock:  wenn ich manchmal sehe was du so schreibst bekomm ich ganz stark das Bedürfniss mich mit nem Duzend Java-Bücher im Keller einzusperren und zu büffeln ...


----------



## DaKo (14. Dez 2006)

> Das bekomm ich von dir gesagt? icon_eek.gif wenn ich manchmal sehe was du so schreibst bekomm ich ganz stark das Bedürfniss mich mit nem Duzend Java-Bücher im Keller einzusperren und zu büffeln ...



Das Gefühl kenn ich


----------



## Azrahel (14. Dez 2006)

Der Andre Uhres ist da auch so ein Kandidat, der hat scheinbar ne Hirn-Speicher-Erweiterung die direkt mit der Api verknüpft ist ...


----------

