# DBAnbindung mit Mahnungsdruckfunktion GUI



## bigfredder (22. Jan 2010)

Hallo zusammen,

ich hab ein Problem mit meinem Programm:-( ich brauch das für die Schule.
Ich muss ein Programm schreiben, dass eine Acces Datenbankanbindung hat mit einer Grafischen Oberfläche.
Das Programm sollte eine Art Bibliothek sein. Also man kann sich hier zum beispiel bücher leihen.
Dann soll sich der nutzer auch anmelden können! dann sollte auch die funktion mit integriert sein, dass wenn einer die frist von 10 wochen überschreitet eine mahnung ausgedruckt werden soll oder wenigstens irgendwie angezeigt werden soll!
bei mir funktioniert das Grundgerüst nicht einmal!:-(
Jetzt bekomme ich immer irgendwelche fehlermeldungen. geht also nicht einmal auf das fenster!
Hab das mit eclipse gemacht! Unten meine Klassen!
Wäre toll wenn mir jemand helfen kann! Gibt halt ne Note und mit Java hab ichs garnicht

Meine Datenbankanbindung:

```
package paket_SEA;


import java.sql.*;

public class DBAnbindung {

	
	Connection dbVerbindung = null;
	Statement sqlAnweisung = null;
	String sqlString = "SELECT * FROM Kunde;";
	String sqlString2;
	ResultSet ergebnis = null;
	String dateiname;
	String datenbank;
	Kunde aktuellerKU;
	

	public DBAnbindung() {
		// default
	}
	
	public DBAnbindung(Kunde pKU) {
		aktuellerKU = pKU;
	}

	

	public void oeffneDB()  {
		
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		}
		catch (ClassNotFoundException e) {
			System.err.println("Kein Treiber gefunden ...");
			return;
		}

		
		try {
			
			dateiname = "C:/Benutzer/User/Desktop/Kunde.mdb";
			datenbank = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + dateiname;
			
			dbVerbindung = DriverManager.getConnection(datenbank,"","");		
			System.out.println("DB-Verbindung erfolgreich hergestellt ...");
		}
		catch (Exception e2) {
			System.out.println("Fehler beim Verbindungsaufbau! Keine Verbindung!");
			e2.printStackTrace();
		}
	}


	public ResultSet abfrageSenden() {
		try {
			sqlAnweisung = dbVerbindung.createStatement();
			ergebnis = sqlAnweisung.executeQuery(sqlString);
			
		}
		catch (SQLException e) {
			System.out.println("Fehler beim DB-Zugriff!   " + e);
			System.exit(0);
		}
		return ergebnis;
	}

	public void aenderungSenden(Kunde aktuellerKU) {
		try {
			sqlString2 = "INSERT INTO Kunde VALUES ('" + aktuellerKU.getId() + "', '" + aktuellerKU.getName() + "', '"
							+ aktuellerKU.getVorname() + "', " + aktuellerKU.getLeihdatum() + ");";
			sqlAnweisung = dbVerbindung.createStatement();
			sqlAnweisung.executeUpdate(sqlString2);
		}
		catch(SQLException err)   {
			System.err.println(err);

		}
	}

	public void schliesseDB()
	{
		try
		{
			sqlAnweisung.close();
			System.out.println("sqlAnweisung-Objekt vernichtet");
			dbVerbindung.close();
			System.out.println("DB-Verbindung geschlossen !");
		}
		catch (SQLException err)   {
			System.err.println(err);
		}
	}

}
```

Meine Klasse Kunde:

```
package paket_SEA;

public class Kunde {
	// Attribute
	String id;
	String name;
	String vorname;
	int leihdatum;
	
	// Konstruktoren
	public Kunde() {
		// default
	}
	
	public Kunde(String pId, String pName, String pVorname, int pLeihdatum) {
		id = pId;
		name = pName;
		vorname = pVorname;
		leihdatum = pLeihdatum;
	}
	
	// Methoden
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getVorname() {
		return vorname;
	}
	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	public int getLeihdatum() {
		return leihdatum;
	}
	public void setLeihdatum(int leihdatum) {
		this.leihdatum = leihdatum;
	}
}
```

Meine Klasse Hauptfenster:

```
package paket_SEA;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.List;
import java.sql.ResultSet;
import java.awt.Dimension;

public class Hauptfenster extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton btNeu = null;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JLabel jLabel2 = null;
	private JLabel jLabel3 = null;
	private JTextField tfName = null;
	private JTextField tfVorname = null;
	private JTextField tfLeihdatum = null;
	private JButton btSpeichern = null;
	private JButton btEnde = null;
	private List listKU = null;
	private JButton btAnzeigen = null;
	private JLabel KundenID = null;
	private JTextField tfKundenID = null;
	
	// NEU NEU NEU NEU NEU NEU NEU NEU
	Kunde ku = new Kunde();
	DBAnbindung dba = new DBAnbindung(ku);
	private JLabel PersönlicheDaten = null;  
	
	/**
	 * This is the default constructor
	 */
	public Hauptfenster() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(458, 358);
		this.setContentPane(getJContentPane());
		this.setTitle("Bibliotheks-Verwaltung");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			PersönlicheDaten = new JLabel();
			PersönlicheDaten.setBounds(new Rectangle(15, 14, 118, 36));
			PersönlicheDaten.setText("Persönliche Daten");
			KundenID = new JLabel();
			KundenID.setBounds(new Rectangle(16, 61, 64, 26));
			KundenID.setText("KundenID");
			jLabel2.setText("Aktuelle Kunde");
			jLabel2 = new JLabel();
			jLabel2.setBounds(new Rectangle(15, 159, 63, 24));
			jLabel2.setText("Letztes Leihdatum:");
			jLabel1 = new JLabel();
			jLabel1.setBounds(new Rectangle(15, 126, 64, 27));
			jLabel1.setText("Vorname:");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(16, 96, 61, 25));
			jLabel.setText("Name:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(PersönlicheDaten, null);
			jContentPane.add(getBtNeu(), null);
			jContentPane.add(getBtSpeichern(), null);
			jContentPane.add(getBtEnde(), null);
			jContentPane.add(getBtAnzeigen(), null);
			jContentPane.add(KundenID, null);
			jContentPane.add(jLabel, null);
			jContentPane.add(jLabel1, null);
			jContentPane.add(jLabel2, null);
			jContentPane.add(getTfKundenID(), null);
			jContentPane.add(getTfVorname(), null);
			jContentPane.add(getTfName(), null);
			jContentPane.add(getTfLeihdatum(), null);
			jContentPane.add(jLabel3, null);
			jContentPane.add(getListKU(), null);
			jContentPane.add(getTfKundenID(), null);

		}
		return jContentPane;
	}

	
	private JButton getBtNeu() {
		if (btNeu == null) {
			btNeu = new JButton();
			btNeu.setBounds(new Rectangle(17, 220, 59, 34));
			btNeu.setText("NEU");
			btNeu.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("Neu gedrückt"); 
					tfKundenID.setText("");
					tfName.setText("");
					tfVorname.setText("");
					tfLeihdatum.setText("");
					listKU.clear();
				}
			});
		}
		return btNeu;
	}
	private JTextField getTfKundenID() {
		if (tfKundenID == null) {
			tfKundenID = new JTextField();
			tfKundenID.setBounds(new Rectangle(84, 62, 93, 25));
			tfKundenID.setText("tfKundenID");
		}
		return tfKundenID;
	}
	
	private JTextField getTfName() {
		if (tfName == null) {
			tfName = new JTextField();
			tfName.setBounds(new Rectangle(83, 96, 94, 27));
			tfName.setText("tfName");
		}
		return tfName;
	}


	private JTextField getTfVorname() {
		if (tfVorname == null) {
			tfVorname = new JTextField();
			tfVorname.setBounds(new Rectangle(82, 127, 96, 26));
			tfVorname.setText("tfVorname");
		}
		return tfVorname;
	}

	
	private JTextField getTfLeihdatum() {
		if (tfLeihdatum == null) {
			tfLeihdatum = new JTextField();
			tfLeihdatum.setBounds(new Rectangle(81, 159, 96, 25));
			tfLeihdatum.setText("tfLeihdatum");
		}
		return tfLeihdatum;
	}

	
	private JButton getBtSpeichern() {
		if (btSpeichern == null) {
			btSpeichern = new JButton();
			btSpeichern.setBounds(new Rectangle(80, 221, 97, 34));
			btSpeichern.setText("Speichern");
			btSpeichern.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("Speichern gedrückt"); 
					// Daten einlesen
					ku.setId(tfKundenID.getText());
					ku.setName(tfName.getText());
					ku.setVorname(tfVorname.getText());
					ku.setLeihdatum(Integer.parseInt(tfLeihdatum.getText()));
					// Daten übermitteln
					dba.oeffneDB();
					dba.aenderungSenden(ku);
					dba.schliesseDB();
				}
			});
		}
		return btSpeichern;
	}

	
	private JButton getBtEnde() {
		if (btEnde == null) {
			btEnde = new JButton();
			btEnde.setBounds(new Rectangle(17, 262, 161, 30));
			btEnde.setText("Ende");
			btEnde.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("Ende gedrückt"); 
					System.exit(0);
				}
			});
		}
		return btEnde;
	}


	private List getListKU() {
		if (listKU == null) {
			listKU = new List();
			listKU.setBounds(new Rectangle(213, 57, 192, 190));
		}
		return listKU;
	}

	private JButton getBtAnzeigen() {
		if (btAnzeigen == null) {
			btAnzeigen = new JButton();
			btAnzeigen.setBounds(new Rectangle(250, 260, 124, 31));
			btAnzeigen.setText("Anzeigen");
			btAnzeigen.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("Anzeigen gedrückt"); 
					ResultSet erg;
					try {
						listKU.clear();
						dba.oeffneDB();
						erg = dba.abfrageSenden();
						while(erg.next())
							listKU.add(erg.getString(1) + ", " + erg.getString(2) + ", " +erg.getString(3));
						erg.close();
						}
						catch(Exception ex) {
							System.out.println("Fehler beim DB-Zugriff!   " + e);
							System.exit(0);;
						}
						dba.schliesseDB();
				}
			});
		}
		return btAnzeigen;
	}

}
```

Meine Startklasse:

```
package paket_SEA;

import paket_SEA.Hauptfenster;

public class Startklasse {
	public static void main(String[] args) {
		Hauptfenster h1 = new Hauptfenster();
		h1.setVisible(true);
	}
}
```


----------



## L-ectron-X (22. Jan 2010)

bigfredder hat gesagt.:


> bei mir funktioniert das Grundgerüst nicht einmal!:-(
> Jetzt bekomme ich immer irgendwelche fehlermeldungen. geht also nicht einmal auf das fenster!



...die da lauten?


----------



## bigfredder (22. Jan 2010)

IWAV0052E Invocation Target Exception creating paket_SEA.Hauptfenster
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:59)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at paket_SEA.Hauptfenster.getJContentPane(Hauptfenster.java:69)
	at paket_SEA.Hauptfenster.initialize(Hauptfenster.java:52)
	at paket_SEA.Hauptfenster.<init>(Hauptfenster.java:42)
	... 13 more
 Und bei meiner Startklasse:

Exception in thread "main" java.lang.NullPointerException
	at paket_SEA.Hauptfenster.getJContentPane(Hauptfenster.java:69)
	at paket_SEA.Hauptfenster.initialize(Hauptfenster.java:52)
	at paket_SEA.Hauptfenster.<init>(Hauptfenster.java:42)
	at paket_SEA.Startklasse.main(Startklasse.java:7)


----------



## Firestorm87 (22. Jan 2010)

Versuch einfach mal das ganze mit dem Debugger zu starten und setze ein "Java-Exception-Breakpoint" (Über das Menü Run => Add Java....)
Und da wählst du "Nullpointer-Ecxeption" aus...

Dann einfach mal gucken wo es knallt und anhand des Ablaufs kann man dann wunderbar sehen wo er bei welchem Zugriff hängen bleibt...


----------



## bigfredder (22. Jan 2010)

hier hab ich mal das bild vom debugg modus! aber irgendwie versteh ich das nicht!
Kostenloser Bilder Upload Service - Gratis Bilder hochladen / uploaden ohne Anmeldung


----------



## eRaaaa (22. Jan 2010)

Ohne den Thread verfolgt zu haben: du rufst erst setText auf, danach erstellst du erst die Instanz des JLabels  tausche mal die Zeilen (69 und 70)! ;D (könnte helfen)


----------



## Firestorm87 (22. Jan 2010)

Wie im Vorpost beschrieben...

```
jLabel2.setText("Aktuelle Kunde");
jLabel2 = new JLabel();
```
hier sollte das Problem liegen....


----------



## bigfredder (22. Jan 2010)

Ja das mit dem drehen hat geklappt! aber da kommen immernoch fehler! könnt ihr das nicht in eclipse kopieren und dann schauen was da falsch ist?


----------



## Firestorm87 (22. Jan 2010)

Dann bist du auch kein deut schlauer 

Das ist "leider" ein elementarer Teil der Programmierung.... "Fehlersuche" 

Aber wenn du bei einem Fehler wirklich nicht weiter weißt, dann immer her damit... aber nur dann lernst du auch was draus...

/EDIT: Der "Trick" für den Nullpointer funktioniert natürlich auch mit anderen Exceptions


----------



## bigfredder (22. Jan 2010)

ja ich würde sie ja beheben aber ich versteh nicht was ich ändern soll:-(


----------



## bigfredder (22. Jan 2010)

das mit /EDIT: versteh ich nicht! tut mir leid euch zu stressen aber da versteh ich nicht viel von!


----------



## Firestorm87 (22. Jan 2010)

```
this.jContentPane.add(this.jLabel3, null);
```
jLabel3 = null, da nie gesetzt....

Und dann geht zumindest dein Fenster auf


----------



## bigfredder (22. Jan 2010)

der hängt sich an dem super beim hauptfenster auf! 
this.jContentPane.add(this.jLabel3, null);
das muss doch dann unter public hauptfenster oder?


----------



## bigfredder (22. Jan 2010)

Kann mir da jemand helfen? ich komm hier nicht weiter!


----------



## Firestorm87 (22. Jan 2010)

jLabel3 wird einfach nirgens instanziiert....
Wenn du irgendwo vorher "jLabel3 = new JLabel();", dann kannst du dein Fenster auch öffnen...

Aber wenn du wirklich so wenig mit diesen Sachen anfangen kannst, dann ist sicher die Nachfrage gestattet, ob du den Rest wirklich geschrieben hast?!?


----------



## bigfredder (22. Jan 2010)

Naja das hab ich ja nie behauptet
aber das ist ja mein problem! ich versteh es nicht und muss es können! deswegen hab ich das auch hier eingestellt:-(


----------



## eRaaaa (22. Jan 2010)

Was soll man dir denn noch sagen? Mehr als daß du Zeile 69 mit 70 tauschen sollst, und vor Zeile 94 eine neue einfügst mit [c]jLabel3 = new JLabel();[/c] kann man doch nicht. 

Wofür jetzt jLabel3 genau gut sein soll, solltest ja eig. du wissen


----------

