# Datenbankmodul von SQL trennen



## kingpin166 (23. Apr 2006)

Hi,

folgendes Vorhaben. Ich habe eine Klasse Profil.java in der die komplette GUI geschrieben ist. Nun möchte ich die Eingaben, die dort getätigt werden an eine Klasse übergeben Queries.java , in der die Eingaben in SQL Statements gewandelt werden. 
Und eine dritte Klasse Db_connect.java soll einfach nur die Verbindung für das SQL Statement öffnen und wieder abbauen, aber irgendwie komm ich da nicht ganz mit.

Die GUI ist nicht das Problem, mir geht es eher um den Zugriff von queries.java auf Db_connect.
Also die Profil.java soll nur auf Queries zugreifen und Queries.java wiederrum auf Db_Connect.

Habe jetzt folgenden Code in der Db_Connect:


```
package sql;

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




public class Db_connect {
  	
   public void verbinden() {
   //Datenbanktreiber laden 
   {
	   try {
		   	  DriverManager.setLogWriter( new PrintWriter(System.out) );
		      Class.forName("com.mysql.jdbc.Driver");
		      System.out.println("Treiber erfolgreich geladen");
		    }
		    catch ( ClassNotFoundException e ) {
		      System.out.println( "Fehler bei der JDBC-MySQL Verbindung" + e );
		      return;
		    }
    Connection conn;
		   
		try
		    {
		  	//Verbindung aufbauen
		    String user = "...";
		    String pass = "...";
		    conn = DriverManager.getConnection( "jdbc:mysql://server", user, pass);
		    System.out.println("Verbindung erfolgreich"); 
		    stmt = conn.createStatement();
		    
		    
		    }		    
   public void close_connection(){
		   	//Verbindung schliessen
		   	stmt.close();
		   	conn.close();
		   	System.out.println("Verbindung getrennt");
   			}
		  	  		          		         }
		  	 
		  	return;	} 
  }
```

Hier ist die Queries.java


```
package sql;

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

public class queries {

	Db_connect connect = new Db_connect();
	Statement stmt = null;
	
	public void eintragen(String name, String alter)
	{
		
		connect.verbinden();
		stmt = connect.verbinden().conn;
		int rs = stmt.executeUpdate("INSERT INTO testTable (testName,testAlter)  VALUES ('" + name +"' ,'" + alter + "')");
	}
}
```


Es soll also in der Queries.java eine Verbindung erstellt werden, dann das SQL Statement abgesetzt werden und dann soll die Verbindung wieder geschlossen werden.

Steh aufm Schlauch...


----------



## SamHotte (24. Apr 2006)

was soll in Zeile 15 passieren? besser wäre es, du lässt dir von Db_connect() das Connection-Objekt geben und holst dir in Queries dann das Statement (bzw. besser ein PreparedStatement).


----------



## Guest (24. Apr 2006)

In Zeile 15 soll die Methode verbinden von der klasse Db_connect augerufen werden. 
In dieser steht dann drin, wie die Datenbankverbindung von statten geht mit Treiber laden etc...


----------



## SamHotte (24. Apr 2006)

Hmm. Dann meine ich wohl Zeile 16 (also die mit 
	
	
	
	





```
stmt = connect.verbinden().conn;
```
 - wozu soll das gut sein?

An der Stelle würde normalerweise so etwas wie 
	
	
	
	





```
Connection.createStatement()
```
 stehen ...


----------



## kingpin166 (24. Apr 2006)

Oh ja.. sorry. Das war noch experimenteller Code. 
Die Zeile ist natürlich Blödsinn.

Hast du denn evtl noch ne Idee, wie ich aus der Klasse für die GUI die Variablen in die Klasse mit den Datenbankabfragen übergebe ?
Ich möchte halt für jedes SQL Statement, wie eintragen, suchen oder löschen oder editieren eine eigene Methode haben. 
Machbar oder stell ich mir das falsch vor ?


----------



## SamHotte (25. Apr 2006)

Definitiv machbar - nennt man MVC-Paradigma (Model-View-Controller). Funktioniert im Grunde so, dass du im Model sämtliche Datenbank und -modellbezogenen Informationen hast (bspw. auch die Wrapperklassen, die aus den Datensätzen Objekte machen und umgekehrt), die View (also deine GUI) nur Objekte bekommt und die Control-Schicht das Zusammenspiel steuert. Such im Forum (und auch sonst) mal nach MVC, da gibt es tausende Beispiele.


----------



## willi69 (25. Apr 2006)

kingpin166 hat gesagt.:
			
		

> Oh ja.. sorry. Das war noch experimenteller Code.
> Die Zeile ist natürlich Blödsinn.
> 
> Hast du denn evtl noch ne Idee, wie ich aus der Klasse für die GUI die Variablen in die Klasse mit den Datenbankabfragen übergebe ?
> ...



Am einfachsten wäre es m.E. wenn Du eine gute, alte Bean für die Übergabe der einzelnen Werte benutzt. Als zusätzliche Eigenschaft kannst Du noch die durchzuführende Aktion in der Bean ablegen, und dann in Deiner Persistenz-Klasse nach diesem Parameter entscheiden, welche Aktion durchgeführt wird.


----------

