Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Connection Conn richtig weitergeben?
Antwort
 
Themen-Optionen
Alt 04.02.2005, 23:16   Nach oben    #1
Benutzer
 
Registriert seit: 11.08.2004
Beiträge: 55
Standard Connection Conn richtig weitergeben?

Ich habe eine Verbindung zu einer Mysql - DB aufgebaut. Nun möchte ich mit verschiedenen Abfragen darauf zugreifen ( die verschiedenen Abfragen werden von verschiedenen Menüpunkten aus gestartet. Jeder dieser Menüpunkte hat ein eigenes JFrame und eine entsprechenden Verarbeitungsklasse mit dem Statement... ). Meine Frage ist nun, was muß ich machen ( bzw. wie ) das ich auf die zu beginn aufgebaute Connection zugreifen kann?
ghost ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 00:11   Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von Gottzilla
 
Registriert seit: 02.02.2005
Beiträge: 515
Standard

Hier dürftest du finden, was du suchst

http://java.sun.com/j2se/1.5.0/docs/...onnection.html
Gottzilla ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 02:37   Nach oben    #3
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

nein @hobbit. ich glaube nicht, dass ihm das hilft.

ich denke du suchst nach einer lösung, wie du die gleiche connection-resource weiterverwenden kannst?
dann wäre eventuell ein singleton genau das richtige für dich.
http://de.wikipedia.org/wiki/Singleton


um deine frage wirklich gut beantworten zu können benötigen wir allerdings noch die struktur, wie deine klassen zusammenhängen. bestenfalls als UML-diagramm.

aber wenn du so etwas nicht hast oder nicht weißt, wie du es erstellen kannst, dann beschreib es eben mit worten. am besten so detailliert wie möglich

generell kannst du es auch so machen, dass du einfach das objekt an alle klassen per konstruktor oder methode weitergibst, aber wie gesagt ... ohne struktur und zusammenhang der klassen ist das jetzt alles etwas schwierig

grüße ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 06:41   Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 16.11.2005
Beiträge: 243
Standard

ja man kann die Connection im Constructor übergeben. Das Problem ist nur wo startest du Deine Verbindung? Beim Start des Programms? Wenn ja hast du halt das Problem wenn deine Verbindung aus irgendwelchen Gründe gecancelt wird, musst du dein Programm neu starten.Und da man/frau ja Daten von der Ansicht trennen soll mach ich meine gesamten Verbindungsgeschichten über extra klassen die Methoden enthalten die mit den Fehlern umgehen können. d.h SQL String rein in die Klasse und ResultSet als return.
nove ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 11:35   Nach oben    #5
Benutzer
 
Registriert seit: 11.08.2004
Beiträge: 55
Standard Connection

Programmstruktur:
Klasse Main: Start, ruft GUI auf ( s.u. ), enthält Windowlistener und Menü ( Menüleiste oben )
Klasse GUI: Enthält Textfelder, label... / Für die Eingabe der Logindaten, Ausgabe von Fehlermeldungen, eingabe einer sql - abfrage, ausgabe der antwort / per button wird die Klasse Connect aufgerufen
Klasse Connect: Verbindungsaufbau mit den in GUI eingegebenen Login-Daten
Klasse Abfrage: Aufruf per Button von GUI ( mit der SQL-Abfrage, die in das Abfrage-Feld eingegeben wurde ), Ausführung der Abfrage, Ausgabe der Abfrage in GUI ( Textarea)
--> Das oben genannte hat bisher funktioniert, aber nur wenn ich die Connection static gemacht habe und mit Connect.conn = ... darauf zugegriffen habe.
Ich möchte das Programm jetzt jedoch so erweitern, das man per Menü ( siehe Main ), nach erfolgtem Login, einzelne besondere Menüpunkte aufrufen kann um dann ( ohne SQL-Befehle eingeben zu müssen ) z.B.: eine Benutzer anlegen zu können.
Das ganze sollte dann (wenn möglich ) über zwei Klassen erfolgen.
Klasse1: Aufruf erfolgt über das Menü, ähnlich wie GUI enthält alles für Ein- und Ausgaben, Aktion wird per Button gestartet
Klasse2: Ausführung der Aktion und Rückgabe des Ergebnisses an Klasse1

Wenn ich die Connection nun static hab, dann funktioniert der Zugriff auf sie von Klasse1 nicht. Mache ich sie jedoch nicht static, gehts auch nicht

Was kann ich machen?
ghost ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 13:00   Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von Gottzilla
 
Registriert seit: 02.02.2005
Beiträge: 515
Standard

Zitat:
Zitat von Ben
nein @hobbit. ich glaube nicht, dass ihm das hilft.
Oh Sorry, hab die Frage falsch verstanden . Mal überlegen ...
Gottzilla ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 15:00   Nach oben    #7
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Zitat:
Klasse: SQL
--------------
- Connection conn

-----

- connect()
|
---------------
if( !this.conn )
// neue Connection erstellen

+ getConnection()
|
---------------
return this.conn;
du übergibst nun ein objekt der klasse SQL und kannst dann so auf die methoden zugreifen. die methode connect() könnte man dann immer dort aufrufen, wo mit der datenbank kommuniziert wird.
zusätzlich im konstruktor.

übergebe die referenz der SQL-klasse an die klassen, die es benötigen und versuche dein glück.

meine antwort ist rein theoretisch. nichts getestet.
um ehrlich zu sein habe ich noch nie mit einer DB (in java) gearbeitet ^^

grüße ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 15:28   Nach oben    #8
Benutzer
 
Registriert seit: 11.08.2004
Beiträge: 55
Standard Connection

Wie meinst du das? Ich baue in Connect die Connection auf. Was soll ich ändern? Irgendwie komm ich grad nicht klar, sorry?
ghost ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 15:50   Nach oben    #9
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard Re: Connection

Zitat:
Wie meinst du das? Ich baue in Connect die Connection auf.
ja. so würde ich das machen.

Zitat:
Was soll ich ändern?
wie gesagt, eine referenz auf ein objekt der SQL-klasse muss in den klassen vorhanden sein, die SQL-statements abschicken, also mit der DB kommunizieren wollen.

das kannst du per konstruktor oder set-methode machen.

Zitat:
Irgendwie komm ich grad nicht klar, sorry?
jo. mehr kann ich leider dazu auch nicht sagen.
ist nur ein denkansatz, so wie ich ihn gemacht hätte
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 17:48   Nach oben    #10
Fuzzy
Gast
 
Beiträge: n/a
Standard

Hi

um das Problem konkreter zu machen: Könntest Du die ggf. verkürzte Klasse posten, in der Du die Connection anlegst und eine andere, in der Du darauf zugreifen willst?

Dann läßt sich das Problem ziemlich einfach lösen (sofern Du Dich nicht im J2EE-Umfeld oder im Eclipse-Framework-Umfeld bewegst - wenn Du das dafür brauchen würdest, wäre allerdings das Anfänger-Forum falsch ).

Danke schonmal im voraus
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2005, 18:43   Nach oben    #11
Benutzer
 
Registriert seit: 11.08.2004
Beiträge: 55
Standard Connection

Ich glaub schön langsam check ichs ( probier jetzt dann dran rum ). Für alle Fälle poste ich hier mal die gewünschten Klassen ( Connect komplett / die andere in Kurzform
Java Code:
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.net.*;
  5. import java.sql.*;
  6.  
  7. //Klasse mit der die Verbindung zur MySQL - Datenbank aufgebaut wird
  8. public class Connect {
  9.         public Connection conn = null;
  10.         public Connect(String user, String password, String dbhost, String dbname ){
  11.        
  12.       Komplett.Text("Button gedrückt");
  13.                 try{
  14.                 Komplett.Text("Treiber wird geladen");
  15.                 //Laden des Treibers
  16.                     Class.forName("com.mysql.jdbc.Driver");
  17.                     Komplett.Text("com.mysql.jdbc.Driver");
  18.                     Komplett.Text("Treiber wird geladen");
  19.                 }
  20.                 catch(ClassNotFoundException cnfs){
  21.                 Komplett.Text("Class not Found");
  22.                 }
  23.         try{
  24.               //conn-String erstellen
  25.               String connstr = "jdbc:mysql://" + dbhost + "/" + dbname;
  26.               Komplett.Text(connstr);
  27.              //Verbindungsaufbau
  28.              conn = DriverManager.getConnection(connstr, user, password);
  29.                 Komplett.Text("Verbindungsaufbau");
  30.                 boolean test = true;}
  31.                 //Abfangen der Fehlermeldung
  32.                 catch(SQLException sqle){
  33.                     Komplett.Text("Verbindung fehlgeschlagen: " + sqle.getMessage());
  34. }
  35. }
  36. }
Java Code:
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.net.*;
  5. import java.sql.*;
  6.  
  7. //Klasse für den Aufbau des Hauptfensters
  8.  
  9. public class GUI extends JFrame{
  10.     public boolean test = false;
  11.     private JTextField tfname = new JTextField();
  12.     private JTextField tfpw = new JTextField();
  13.     private JTextField tfdb = new JTextField();
  14.     private JTextField tfhost = new JTextField();
  15.     private static JTextArea aus = new JTextArea();
  16.     private static JTextArea ein = new JTextArea();
  17.     private static JTextArea hilfe = new JTextArea();
  18.    
  19.         //"Methode" um Informationen aus anderen Klassen in aus ausgeben zu können
  20.         public static void Text(String text){
  21.         Komplett.aus.append("
  22. "+text);
  23.         }
  24.    
  25.     //Hauptfensteraufbau
  26.     public GUI(){
  27.         super("MySQL - Schnittstelle");
  28.         
  29.         //Linker Panel
  30.         JPanel pan = new JPanel();
  31.         pan.setLayout(new GridBagLayout());
  32.         
  33.         // Beschreibung, Eingabefenster  und Buttons;   
  34.         JLabel lab = new JLabel();
  35.         lab.setOpaque(true);
  36.         lab.setFont(new Font("Helvetica", Font.PLAIN, 14));
  37.         lab.setText("Benutzername: ");
  38.         pan.add(lab, new GridBagConstraints(0,0,1,1,0.4,0.01,
  39.             GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0), 1, 1
  40.        
  41.         JLabel lab2 = new JLabel();
  42.         lab2.setOpaque(true);
  43.         lab2.setFont(new Font("Helvetica", Font.PLAIN, 14));
  44.         lab2.setText("Passwort: ");
  45.         pan.add(lab2, new GridBagConstraints(0,1,1,1,0.4,0.01,
  46.             GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),1,1));
  47.            
  48.         // Restliche JLabel / JPanel / JTextField ... rausgenommen...
  49.                
  50.         //Rechtes Panel 
  51.         JPanel pan2= new JPanel();
  52.         pan2.setLayout(new GridBagLayout());
  53.        
  54.         //Ausgabefenster und Button
  55.         aus.setFont(new Font("Helvetica", Font.PLAIN, 12));
  56.         aus.setEditable(false);
  57.         aus.addMouseListener(h5);
  58.         JScrollPane scroll = new JScrollPane(aus);
  59.         pan2.add(scroll, new GridBagConstraints(0,0,6,5,1.0,1.0,
  60.             GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0,0,0,0),1,1));
  61.                
  62.         ein.setFont(new Font("Helvetica", Font.PLAIN,12));
  63.         ein.addMouseListener(h6);
  64.         JScrollPane scroll2 = new JScrollPane(ein);
  65.         pan2.add(scroll2, new GridBagConstraints(0,7,6,1,1.0,0.1,
  66.             GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0,0,0,0),1,1));
  67.            
  68.         JButton but2 = new JButton();
  69.         but2.setText("Ausführen");
  70.         but2.setBackground(Color.green);
  71.         but2.addActionListener(AL2);
  72.         pan2.add(but2, new GridBagConstraints(0,8,1,1,1.0,0.1,
  73.             GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0,0,0,0),1,1));
  74.        
  75.         JButton but3 = new JButton();
  76.         but3.setText("Verbindung trennen");
  77.         but3.setBackground(Color.red);
  78.         but3.addActionListener(AL3);
  79.         pan2.add(but3, new GridBagConstraints(2,8,1,1,1.0,0.1,