# Get und Set-Methoden



## Marco Witter (26. März 2004)

Hallo,

bitte dringend um Hilfe. Es geht um folgendes:
Ich möchte die Variable PV_PatientenID aus meiner Klasse Parser auslesen,
was bis dahin auch klappt und dann in meine Klasse AccessDB
mit Hilfe der get/set Methode übertragen und dann per insert in meine DB
einfügen.
Problem ist in der DB erscheinen nur null_Werte.Habe ich die get/set-Methode
falsch angewandt oder kann man sie dafür gar nicht anwenden?
Weil ein Sytem.out.println ergab, dass die Variable gar nicht in der AccessDB-Klasse ankommt.
Bitte um Hilfe oder Verbesserungsvorschläge, weil ich nicht wieder alles mit unendlich vielen Parameternn innerhalb
einer Methoden übergeben möchte

public class Parser {


private String PatientenID;
private int PV_PatientenID;	

public void setPV_PatientenID(int PV_PatientenID)
{
	this.PV_PatientenID=PV_PatientenID;
}
public int getPV_PatientenID()
{
	return PV_PatientenID;
}

...........
if (Pat_ID) {
PatientenID= new String(ch, start, length);
//Typumwandlung von String nach Integer für die DB-Speicherung
//Möchte den Wert der PV_PatientenID in die DB schreiben
PV_PatientenID=Integer.parseInt(PatientenID);

________________________________________________________________
public class AccessDB{

Parser objParser=new Parser();
objParser.setPV_PatientenID(PV_PatientenID);

int Patient = s.executeUpdate("INSERT INTO Patient VALUES ('"
+objParser.getPV_PatientenID()+"','"+PV_PaName+"')");	

}


----------



## Christian Fein (26. März 2004)

Verfolge doch einfach mal im Debugger 
mit welche Werte deine Variable animmt.


Deine Codeabschnitte helfen hier leider nicht viel


----------



## Marco Witter (26. März 2004)

Dann einmal noch genauer!
Siehe Inlineddoku:...


public class Parser {

//Deklarationen
private String PatientenID;
private int PV_PatientenID; 

//get und set:-Methoden
public void setPV_PatientenID(int PV_PatientenID)
{
this.PV_PatientenID=PV_PatientenID;
}

public int getPV_PatientenID()
{
return PV_PatientenID;
}

...........
if (Pat_ID) {
PatientenID= new String(ch, start, length);
//Typumwandlung von String nach Integer für die DB-Speicherung
//Möchte den Wert der PV_PatientenID in die DB schreiben

//Wenn ich hier nach der Zuweisung ein System.out.println mache,
//wird die PV_PatientenID auch ausgeben
PV_PatientenID=Integer.parseInt(PatientenID);
//Ausgabe funktioniert

________________________________________________________________
public class AccessDB{

//Hier erzeuge ich mein Objekt von der Klasse Parser
Parser objParser=new Parser();

//Hier ist dann komischerweise nichts mehr in der PV_PatientenID
//Gebe ich aber anstatt der PV_PatientenID eine Zahle ein
//wird diese auch in die DB geschrieben
objParser.setPV_PatientenID(PV_PatientenID);

int Patient = s.executeUpdate("INSERT INTO Patient VALUES ('"
+objParser.getPV_PatientenID()+"','"+PV_PaName+"')"); 

}

Übergebe ich vielleicht falsch, sind meine ersten Versuche?


----------



## lambda (26. März 2004)

public int getPV_PatientenID()
{
return PV_PatientenID;
}

hier mal ein this. davor?


----------



## Marco Witter (26. März 2004)

Danke, 

habe es ausprobiert.
Klappt aber auch nicht


----------



## Christian Fein (26. März 2004)

> _Original geschrieben von lambda _
> *public int getPV_PatientenID()
> {
> return PV_PatientenID;
> ...



Ein this muss grundsätzlich nicht davor. Der this Zeiger wird nur benötigt
wenn es eine lokale Variable gleichen namens gibt.
In diesem Fall ist der Bezeichner für die lokale Variable gedacht, und mann
kann dann sich auf die Membervariable gezielt beziehen.

Du solltest deine Variable im Debuger beobachten und dort feststellen 
wo sie ihren Wert nicht erhält. 
Denn das der Wert null ist kann auch viel früher passieren, in Codeabschnitten
die hier nicht ersichtlich sind.

So wird dir kaum jemand helfen können, wenn ja dann war das eher durch
glück.


----------



## Marco Witter (26. März 2004)

Habe leider keinen Debugger!

Naja trotzdem danke.


----------



## Christian Fein (26. März 2004)

> _Original geschrieben von Marco Witter _
> *Habe leider keinen Debugger!
> 
> Naja trotzdem danke. *



Bei jeder JVM ist ein Debugger dabei jdb heisst
das Programm.
Dieser läuft aber nur auf der kommandozeile, für sowas
sollte der aber reichen.

Besser ist du arbeitest mit einer IDE
http://www.eclipse.org
oder
http://www.netbeans.org
runterladen,  und damit debuggen.


----------



## Marco Witter (26. März 2004)

*Einmal den Komplettcode*

Ich find es einfach nicht; hier der Komplettcode der beiden Klassen


//Klasse Parser

import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class Parser {

//Deklarieren
private int PV_PatientenID;
private String PV_PaName;	

public void setPV_PatientenID(int PV_PatientenID)
{
  this.PV_PatientenID=PV_PatientenID;
}

public int getPV_PatientenID()
{
	return PV_PatientenID;
}



public class PeopleHandler extends DefaultHandler {

boolean Pat_ID = false;
boolean Patname = false;

public void startElement(String nsURI, String strippedName,
 String tagName, Attributes attributes)throws SAXException {

if (tagName.equalsIgnoreCase("Pat_ID"))
Pat_ID = true;
if (tagName.equalsIgnoreCase("Patname"))
Patname = true;

}//Ende der Klammer startElement

public void characters(char[] ch, int start, int length) {


if (Pat_ID) {
	String PatientenID;
	PatientenID= new String(ch, start, length);
	//Typumwandlung von String nach Integer für die DB-Speicherung
					PV_PatientenID=Integer.parseInt(PatientenID);
	//System.out.println(PV_PatientenID);
	Pat_ID = false;
	} else if (Patname) {
	PV_PaName=new String(ch, start, length);		
 	//System.out.println(PV_PaName);
	Patname = false;
	}							
}//Ende Klammer characters
}// Ende Klammer PeopleHandler

public void parsetext() throws Exception {

XMLReader parser = XMLReaderFactory.createXMLReader(
"org.apache.xerces.parsers.SAXParser");    // sollte Properties laden
parser.setContentHandler(new PeopleHandler());
parser.parse("Body.txt");}

}//Ende der Klassenklammer

--____________________________________________________________

import java.sql.*;//Klasse zur Datenbankverbindung


public class Accessdatenbank {

	private String PV_PaName;
	private int PV_PatientenID;

	//Methode für die Verbindung mit übergebenen Werten
public void Verbindung){

try{
//Laden der Datenbank-Treiber
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("Treiber gefunden");
//Deklaration der Verbindungsvariable
}

catch(Exception e){

System.out.println("Driver not found!"+e);
}
try{
Connection con;
//Füllen der Objektvariable über den Rückgabewert von
//getConnection
con=DriverManager.getConnection("jdbcdbc:Emailcall");
//Konsolenausgabe
System.out.println("Verbindung hergestellt");

try{
//StatementObjekt für SQL-Abfragen/Anweisungen 
Statement s = con.createStatement();


Parser objparser=new Parser();

//Einfügen der Inhalte in die Tabelle Patient 
objparser.setPV_PatientenID(PV_PatientenID);

nt Patient = s.executeUpdate("INSERT INTO Patient VALUES ('"
+objparser.getPV_PatientenID()+"','"+PV_PaName+"')"); 

s.close();
con.close();
}
catch(Exception e)
{}

}

catch(Exception e){

System.out.println("Fehler!"+e);
}

}}


----------

