# Probleme beim Aufruf aus der DB



## nickname (18. Dez 2009)

Hi,

ich glaub ich brech zusammen. Hier wiedermal ein neues Prob. was mich echt fertig macht;(

Hab zwei Klassen (Isn´n bisschen viel Code)

Klasse 1 (stellt die Verbindung zur DB her und ruft die Inhalte auf)

```
String name, vorname;
private void connectionToDatabase()
	{
		try
		{
			Class.forName(treiberName);		
			n.setTextAreaInClassNewContact("Es hat geklappt");
		}
			catch(ClassNotFoundException cl)
			{
				de.getErrorMessage("Verbindung konnte nicht erstellt werden!", "Error");
			}
		try
		{
			con = DriverManager.getConnection(url,userName,password);
}
			catch(SQLException sql)
			{
				System.out.println("Verbindung nicht vorhanden");
			}
	}
public void abfrageDatenbankAdresse()
		{
			try
			{String str = "SELECT name, vorname FROM adresse";
				stat = con.createStatement();
				rs = stat.executeQuery(str);
				
					while(rs.next())
					{
						name = rs.getString("name");
						vorname = rs.getString("vorname");
					}
			}
			catch(SQLException sql)
			{
				System.out.println(sql);
			}
		}
public String getName()
{return name;
}
public String getVorname()
{
return vorname;
}
```

Und hier nun was mich so fertig macht.
Klasse 2

```
if(button.getActionCommand() == "verbinden")
					{
						ad.referenzAufnehmen(nc);//Methode holt eine Referenz für die Klasse main
						ad.setConnectionToDatabase();
//						ad.abfrageDatenbankAdresse();
//						nc.setTextFieldInClassNewContact(2, ad.getName());
//						nc.setTextFieldInClassNewContact(1, ad.getVorname());
					};											
					
	if(button.getActionCommand() == "datenZeigen")
	{
         ad.abfrageDatenbankAdresse();
         nc.setTextFieldInClassNewContact(7, getName());//7 = siebtes TextField und der Text
         nc.setTextFieldInClassNewContact(10, ad.getVorname());// wie oben
}}
```
Das Problem ist: Ist diese Kostelation (bezogen auf Klasse 2), kann ich keine Daten auf den Textfeldern erzeugen, und ich bekomme ein "nullPointerException" auf -->stat = con.createStatement(); wenn ich dann den Button "verbinden" drücke.
Tauscht man aber die Kommentar in den beiden Buttons aus, dann werden sofort Daten in
den Textfeldern angezeigt, ohne Exception.

Kann es sein, dass sich die Verbindung dann sofort wieder trennt? Was anderes kann ich mir nicht vorstellen...

(Ich werde dann später aber mit PreparedStatement arbeiten)

schon mal DANKE!

gruß nickname


----------



## eRaaaa (18. Dez 2009)

und btw: strings = objekte => mit equals vergleichen (== prüft referenz)

/edit: wieso hat der gleiche button 2 actions?  (sollen wohl zwei verschiedene buttons sein? ;D )


----------



## nickname (18. Dez 2009)

Hi eRaaaa,

vorher
	
	
	
	





```
Object ob = ae.getSource();		
	JButton button = (JButton)ob;
```
Ich kann doch bei getActionCommand() mit "==" prüfen, oder nicht?



> /edit: wieso hat der gleiche button 2 actions?  (sollen wohl zwei verschiedene buttons sein? ;D )


jepp
gruß nickname


----------



## eRaaaa (18. Dez 2009)

nickname hat gesagt.:


> Hi eRaaaa,
> 
> vorher
> 
> ...



hier mag es glücklicherweise für dich vllt gehen, schön ist das aber nicht 

ist das problem jetzt eig. beseitigt?


----------



## nickname (18. Dez 2009)

Hi,



> ist das problem jetzt eig. beseitigt?


Nein, leider nicht.

Hab das versucht:

```
public void actionPerformed(ActionEvent ae)
	{
		Object ob = ae.getSource();
			if(ob.equals(nc.button[0]))
			{
				System.exit(0);
			}
			if(ob.equals(nc.button[1]))//Verbindung zur DB aufstellen
				{
					ad.referenzAufnehmen(nc);//Methode holt eine Referenz für die Klasse NewContact
					ad.setConnectionToDatabase();
//					ad.abfrageDatenbankAdresse();
//					nc.setTextFieldInClassNewContact(2, ad.getName());						
//					nc.setTextFieldInClassNewContact(1, ad.getVorname());
				};
				if(ob.equals(nc.button[4]))//Daten aufrufen
					{
						ad.abfrageDatenbankAdresse();		
						nc.setTextFieldInClassNewContact(2, ad.getName());						
						nc.setTextFieldInClassNewContact(1, ad.getVorname());
}}
```
Das Prob. ist das gleiche. Drücke ich in dieser Konstelation (bezogen auf die Kommentare) den Button[4] bekomme ich eine "nullPointerException" auf "stat = con.createStatement()".
Kommentiere ich den Button[4] aus und hebe diese im Button[1] auf geht alles. Es werden alle 
Daten angezeigt.

Tja...:bahnhof:

gruß nickname


----------



## nickname (18. Dez 2009)

Hi,

hab mal was versucht und das war mal was interessantes.


```
public void actionPerformed(ActionEvent ae)
	{
		Object ob = ae.getSource();
		
			if(ob.equals(nc.button[0]))
			{
				System.exit(0);
			}
			
			if(ob.equals(nc.button[1]))
				{
					ad.referenzAufnehmen(nc);//Methode holt eine Referenz für die Klasse NewContact
					ad.setConnectionToDatabase();//<--Abfragemethode mitinbegriffen
					ad.getName_2(nc.getTextField()[1]);
				}
				if(ob.equals(nc.button[2]))
					{
					ad.getName_2(nc.getTextField()[1]);
					}}
```
Wenn ich button[1] betätige, dann werden mir die Daten angezeigt, betätige ich dann 
aber den button[2], dann ist die Info auf TextField[1] verschwunden. Also über gebe ich 
damit sozusagen dem TextField[1] einen null-Wert, oder irre ich mich.

Beide greifen auf die gleiche Variable zu.


----------



## SegFault (18. Dez 2009)

also was ist nc? Was ist ad? und die Funktion getName_2 wäre auch interessant. Du übergibst der funktion getName_2 eine Referenz auf das Textfield. wenn in dieser Funktion den inhalt geändert werden würde. Kanns sein das es daher kommt. Ich denke ohne mehr Quelltext kann man da kaum helfen. Ausserdem prüfst du mit equals nach ob es sich wirklich um Button 1, 2 oder 3 handelt. Hier wäre es wohl doch besser mit == zu prüfen, denn nichts ist eindeutiger als die Referenz. Aber hier könnte ich mich auch irren weil ich nicht genau weiß was nc ist.


----------



## nickname (18. Dez 2009)

Hi SegFault,

hast schon recht, mein Code ist etwas spärlich

ad ist eine Referenz auf eine Klasse im anderen Paket und nc ist die Referenz für die Klasse,
wo die main ist, ebenfalls im anderen Paket aber nc und ad sind im gleichen Paket. Dort ist auch die Methode getTextField(), die auf die TextField[] var zugreift.

getName_2() ist nur eine andere Methode zu getName() im meinem Code,der hier weiter oben steht.
Schau Dir mal meinen ersten Beitrag an, dort findest du sie.

gruß nickname


----------

