Wert an andere Klasse übergeben

  • Themenstarter Themenstarter lain
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
L

lain

Gast
Hey Leute,

ich schätze mal das ich hier an ner Kleinigkeit hängen bleib jedoch nicht sehe wo mein Fehler liegt.

Zum einen hab ich die PreisAnfrageMysql Klasse mit der sql Methode

Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.*;

public class PreisAnfrageMysql {

	PreisAnfrageFenster fenster;
	ResultSet fail;
	String sum;
		
	public void sql(){
	    try {
	      Statement stmt;
	
	      Class.forName("com.mysql.jdbc.Driver");
	      String url = "jdbc:mysql://localhost:3306/JunkDB2";
	
	      Connection con = DriverManager.getConnection(url,"root", "");
	
	      System.out.println("URL: " + url);
	      System.out.println("Connection: " + con);
	
	      stmt = con.createStatement();
	      
	      try{
	    	  stmt.executeUpdate("CREATE DATABASE JunkDB2");
	      }catch(Exception ex){
	    	  
	      }
	      
	      stmt.executeUpdate("DROP TABLE persons");
	      stmt.executeUpdate("CREATE TABLE persons(P_Id int,LastName varchar(255))");
	
	      stmt.executeUpdate(
	              "INSERT INTO persons (P_Id, LastName) VALUES (1,2)");
	      fail = stmt.executeQuery("SELECT P_Id FROM persons");
	      while(fail.next()){
	    	  sum = fail.getString("P_Id");
	      }
	      System.out.println(sum);
	      con.close();
	    }catch( Exception e ) {
	      e.printStackTrace();
	    }//end catch
	}//end class sql

	public String getSum() {
		return sum;
	}
}//end class PreisAnfrageMysql

Eine Fenster Klasse in der ich ein paar Felder anzeigen lasse und diese mit Werten aus der Datenbank füllen will.


Code:
import java.awt.Button;
...

public class PreisAnfrageFenster extends Frame {
	//Attribute
		//Labels
	Label lbl1;
	Label lbl2;
		//TextFelder
	TextField txtFeld1;
	TextField txtFeld2;
		//Dropdownmenüs
	Choice choi1;
	Choice choi2;
		//Buttons
	Button btnZurueck;
	Button btnWeiter;
		//MySql
	PreisAnfrageMysql foobar;
	String lolwhat;
	
	//Konstruktoren
	public PreisAnfrageFenster(){
		setBounds(50, 50, 300, 350);
		setBackground(Color.lightGray);
		setLayout(null);
		
		lbl1 = new Label("Auflage: ");
		lbl1.setBounds(20, 170, 60, 20);
		add(lbl1);
		
		txtFeld1 = new TextField();
		txtFeld1.setBounds(20, 190, 120, 20);
		add(txtFeld1);
		
		lbl2 = new Label("Format: ");
		lbl2.setBounds(160, 170, 60, 20);
		add(lbl2);
		
		choi1 = new Choice();
		choi1.setBounds(160, 190, 120, 20);
		choi1.add("Fucker");
		choi1.add("Fuckers");
		choi1.add("Fuckesten");
		add(choi1);
		
		System.out.println("what the heck");
		lolwhat = foobar.getSum();     //Hier bekomm ich immer eine      
                                                                   //NullPointerException
		//txtFeld1.setText(foobar.getSum()); //Hier genauso
		System.out.println("Ende");
	}

	//Methoden
	
	
}


Da habe ich jetzt versucht über ein Getter den Inhalt vom Textfeld mit dem Wert aus der Datenbank zu füllen. Jedoch scheint in dem Fall "Sum" einfach noch leer zu sein obwohl ich in meiner main erst die Mysql Klasse ausführe und dann die Fenster Klasse also:

Code:
	public static void main(String[] args) {
		new PreisAnfrageMysql().sql();
		new PreisAnfrageFenster().setVisible(true);
	}

Ich hoffe mir kann jemand sagen wo mein Fehler liegt dabei das Textfeld zu füllen oder ob das total falsch ist wie ichs mache.
 
Es wird wohl eher daran liegen, dass dein foobar noch gar keinen Wert enthält.

Ich würd vorschlagen die Referenz auf dein PreisAnfragenMysql an dein Fenster zu übergeben:

Code:
PreisAnfragenMysql foobar = new PreisAnfrageMysql();
foobar.sql();
new PreisAnfrageFenster(foobar).setVisible(true);

Code:
public class PreisAnfrageFenster extends Frame { 

  PreisAnfrageMysql foobar;

  public PreisAnfrageFenster(PreisAnfrageMysql f) {

    foobar = f;

  }

}

Danach kannst du dann auf foobar zugreifen.
 
Hi,

soweit ich das sehen konnte, liegt der NullPointer nicht daran, das in sum (in der MySQL-Klasse) nichts drinnen steht, sondern dein Objekt foobar null ist. Zumindest finde ich keine Stelle, an der das Objekt erzeugt wird. Bevor du Methoden der MySQL-Klasse aufrufen kannst, brauchst du eine Instanz der Klasse, die du über new anlegst (sprich, in dem du einen Konstruktor der Klasse aufrufst).

Grüße,
Andreas
 
Andreas29 hat gesagt.:
Hi,

soweit ich das sehen konnte, liegt der NullPointer nicht daran, das in sum (in der MySQL-Klasse) nichts drinnen steht, sondern dein Objekt foobar null ist. Zumindest finde ich keine Stelle, an der das Objekt erzeugt wird. Bevor du Methoden der MySQL-Klasse aufrufen kannst, brauchst du eine Instanz der Klasse, die du über new anlegst (sprich, in dem du einen Konstruktor der Klasse aufrufst).

Grüße,
Andreas


Hey Andreas,

Super die Exception ist jetzt weg ich werde es weiterhin versuchen noch den Wert ins Textfeld zu schreiben. Bei Problemen werd ich mich nochmal kurz melden. =) Danke für die Hilfe.[/code]
 
Ganz hab ich das Problem bis jetzt nicht lösen können. Sum bleibt in der Funktion SQL erhalten und kann ich beliebig abrufen aber sobal ich versuche den Wert mit this.sum oder nur sum abzurufen bekomme ich null geliefert.
Vielleicht weiss einer eine Möglichkeit den Wert aus der Methode jetzt an die Klasse zu übergeben.
Mit nem Getter funktioniert es leider auch nicht. Dort bekomme ich auch nur null geliefert
 
Ganz hab ich das Problem bis jetzt nicht lösen können. Sum bleibt in der Funktion SQL erhalten und kann ich beliebig abrufen aber sobal ich versuche den Wert mit this.sum oder nur sum abzurufen bekomme ich null geliefert.
Vielleicht weiss einer eine Möglichkeit den Wert aus der Methode jetzt an die Klasse zu übergeben.
Mit nem Getter funktioniert es leider auch nicht. Dort bekomme ich auch nur null geliefert

Hast du dir meinen Post überhaupt durchgelesen? Dass du null bekommst, wenn du es so machst, wie Andreas es geschrieben hat, ist klar. Weil du dann nur den Konstruktor aufrufst, aber nicht .sql()...
 
Sorry man :autsch: ich hab dein Post gar nicht gesehen.
Deine Lösung ist super und klappt auch einwandfrei so hatte ichs mir vorgestellt :bae:
thanks 😀 😀 😀
 
lain hat gesagt.:
Sorry man :autsch: ich hab dein Post gar nicht gesehen.
Deine Lösung ist super und klappt auch einwandfrei so hatte ichs mir vorgestellt :bae:
thanks 😀 😀 😀

Ich hatte mich schon gewundert :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben