# Datenbankprogrammierung mit JComboBox



## jockijo (10. Feb 2010)

Hallo,

habe seit ca. 1 Jahr Wirtschaftsinformatik an einem Wirtschaftsgymnasium und habe gerade ein Projekt entwickelt.

Wenn ich in dem GUI-Fenster die Daten eingebe, soll es in die Tabelle von dem Programm Access rein (sry meine Wortwahl, kenn mich mit der Materie noch nicht so aus ^^). Nun aber folgendes Problem: Ich habe eine JComboBox eingefügt, damit ich auswählen kann, ob das Konto ein Aufwand oder ein Ertrag ist. Wenn es dann abgespeichert werden soll, erscheint in der Access-Tabelle der Wert null (siehe Anlage). Ebenso funktioniert auch leider der Erhöhen (soll den Betrag erhöhen) und der Button Vermindern nicht. Habt ihr ne Idee was ich falsch gemacht haben könnte?

Mein Programm [1 Startklasse, 1 Klasse DBZugriff (um Datenbankzugriff zu bekommen), 1 CHauptfenster (GUI-Fenster), 1 Klasse Erfolgskonten]

DBZugriff:

```
package paketUnternehmensergebnis;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBZugriff {
	//Objekte für den Verbindungsaufbau
	Connection objVerbindung=null; //Objekt für die Verbindung zur DB
	Statement objSQLBefehl=null;//Objekt für die Ausführung von SQL-Anweisungen	
	
	//Variable für den Treiber und den Pfad zur Datenbank
	String mTreiber;
	
	public void oeffnen()
	{
		try
		 {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //Treiberklasse für den Zugriff auf DB
			//Angabe des Treibers und des Pfads zur Datenbank 
			mTreiber="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=dberfolg.mdb";
			//Verbindungsaufbau: Objekt für die Verbindung zur DB wird erzeugt
			objVerbindung=DriverManager.getConnection(mTreiber);
		}
		
		catch (Exception e)
		{
			System.out.println("Verbindung fehlgeschlagen!");
		}
	}
	  
		public void aendern(String pSQL)
			{
				try
				 {
					//Zugriff auf DB wird vorbereitet: Objekt für die Ausführung der SQL-Befehle wird erzeugt
					objSQLBefehl=objVerbindung.createStatement();
					//Ausführung der SQL-Anweisung
					objSQLBefehl.executeUpdate(pSQL);
				}
		
				catch (Exception e)
				{
					System.out.println("Zuweisung fehlgeschlagen!");
				}
			}
			  
				public void schliessen()
					{
						try
						 {	
						 	objSQLBefehl.close();
							objVerbindung.close();
						}
		
						catch (Exception e)
						{
							System.out.println("Schliessen DB fehlgeschlagen!");
						}
					}
					  
				public ResultSet lesen(String pSQL)
					{	//Variable vom Typ Resultset wird deklariert
						ResultSet mAntwort;
						try
						 {	//Zugriff auf DB wird vorbereitet: Objekt für die Ausführung der SQL-Befehle wird erzeugt
							objSQLBefehl=objVerbindung.createStatement();
							//Ausführen der SQL-Anweisung und das Ergebnis in einer Variablen abgelegt
							mAntwort=objSQLBefehl.executeQuery(pSQL);
							//Variable mit Ergebnis wird zurückgegeben
							return mAntwort;
						 }
				catch (Exception e)
					   {		System.out.println("Abfrage konnte nicht ausgeführt werden!");
								mAntwort=null;
								return mAntwort;
							}						
					}
}
```



Startklasse:

```
package paketUnternehmensergebnis;

public class Startklasse {

	/**
	 * @param args
	 */
	public static void main(String[] args) {


		CHauptfenster f1 = new CHauptfenster();
		f1.setVisible(true);

	}

}
```



Erfolgskonten


```
package paketUnternehmensergebnis;
import java.sql.*;




public class Erfolgskonten {

//Import nicht vergessen ;)	
ResultSet objErgebnis = null;

//prz für Berechnung der Betragsänderung; true = Erhöhen, false = Senken
public float przBetragändern (float BÄndern, boolean jaErhöhen)
{
	if (jaErhöhen==true)
	{betrag = betrag+BÄndern;}
	
	else
	{betrag = betrag-BÄndern;}
	
	return betrag;
}


//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
//§§§§§§§§§§§§§§§§§   prz´s für SQL  §§§§§§§§§§§§§§§§§§§§
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§


//(1) prz zur Erfassung von Artikeln
public void erfassen()
{	
	String mSQL;
	DBZugriff objZugriff=new DBZugriff();
	
	mSQL=	"INSERT INTO artikel (Ktonr, Bezeichnung, Betrag, Ae) " +
				"VALUES ('"+ this.ktonr+"','"+this.bezeichnung+"',"+this.betrag+",'"+this.ae+"')";
	
	objZugriff.oeffnen();
	objZugriff.aendern(mSQL);
	objZugriff.schliessen();
	
}	
	

//(2) prz zum Ändern von Daten
public void korrigieren()
{	
		String mSQL;
		DBZugriff objZugriff=new DBZugriff();
		
		mSQL=	"UPDATE artikel SET Ktonr='"+this.ktonr+"', Bezeichnung='"+this.bezeichnung+"', Betrag="+this.betrag+
					", Ae='"+this.ae+"' WHERE Ktonr='"+this.ktonr+"'";
		
		objZugriff.oeffnen();
		objZugriff.aendern(mSQL);
		objZugriff.schliessen();
	}


//(3) prz um Artikel zu löschen
public void loeschen()
{	
		String mSQL;
		DBZugriff objZugriff=new DBZugriff();
		
		mSQL=	"DELETE FROM artikel WHERE Ktonr='"+this.ktonr+"'";
		
		objZugriff.oeffnen();
	 	objZugriff.aendern(mSQL);
		objZugriff.schliessen();
}

	
	
//(4) prz um Artikel zu suchen
public void suchen()
{	
	try
	{	
		String mSQL;
		DBZugriff objZugriff=new DBZugriff();
		
		mSQL="SELECT * FROM artikel WHERE Ktonr='"+this.ktonr+"'";
		objZugriff.oeffnen();
		objErgebnis=objZugriff.lesen(mSQL);
		
	}
	catch (Exception e)
	{
		System.out.println("Suche fehlgeschlagen!");
	}
}	
	


//(5) prz um Datensatz einem Ergebnisobjekt zuzuweisen
public void zuweisen()
 {
 	try
 	{	
 		objErgebnis.next();
 		
 		this.ktonr=objErgebnis.getString("ktonr");
 		this.bezeichnung=objErgebnis.getString("bezeichnung");
 		this.betrag=objErgebnis.getFloat("betrag");
 		this.ae=objErgebnis.getString("ae");
 		
 	}
 	
 	catch (Exception e)
 	{
 		System.out.println("Zuweisung Ergebisobjekt fehlgeschlagen!");
 	}
 }
	
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
//§§§§§§§§§§§§§§§§§   prz´s für SQL Ende §§§§§§§§§§§§§§§§
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§	
	
	
	
	
	/*
 * (non-javadoc)
 */
private String ae;
 
/**
 * Getter of the property <tt>ae</tt>
 *
 * @return Returns the ae.
 * 
 */
public String getAe()
{
	return ae;
}

/**
 * Setter of the property <tt>ae</tt>
 *
 * @param ae The ae to set.
 *
 */
public void setAe(String ae ){
	this.ae = ae;
}

/*
 * (non-javadoc)
 */
private float betrag;
 
/**
 * Getter of the property <tt>betrag</tt>
 *
 * @return Returns the betrag.
 * 
 */
public float getBetrag()
{
	return betrag;
}

/**
 * Setter of the property <tt>betrag</tt>
 *
 * @param betrag The betrag to set.
 *
 */
public void setBetrag(float betrag ){
	this.betrag = betrag;
}

/*
 * (non-javadoc)
 */
private String bezeichnung;
 
/**
 * Getter of the property <tt>bezeichnung</tt>
 *
 * @return Returns the bezeichnung.
 * 
 */
public String getBezeichnung()
{
	return bezeichnung;
}

/**
 * Setter of the property <tt>bezeichnung</tt>
 *
 * @param bezeichnung The bezeichnung to set.
 *
 */
public void setBezeichnung(String bezeichnung ){
	this.bezeichnung = bezeichnung;
}

/*
 * (non-javadoc)
 */
private String ktonr;
 
/**
 * Getter of the property <tt>ktonr</tt>
 *
 * @return Returns the ktonr.
 * 
 */
public String getKtonr()
{
	return ktonr;
}

/**
 * Setter of the property <tt>ktonr</tt>
 *
 * @param ktonr The ktonr to set.
 *
 */
public void setKtonr(String ktonr ){
	this.ktonr = ktonr;
}

	public Erfolgskonten(){
	
	}

}
```




CHauptfenster (GUI)


```
package paketUnternehmensergebnis;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class CHauptfenster extends javax.swing.JFrame {
	private JLabel jLabel1;
	private JLabel jLabel2;
	private JLabel jLabel3;
	private JLabel jLabel4;
	private JLabel jLabel5;
	private JButton btAnzeigen;
	private JLabel jLabel7;
	private JTextArea taAusgabe;
	private JComboBox jComboBox1;
	private JButton btLoeschen;
	private JButton btVermindern;
	private JButton btErhoehen;
	private JTextField tfAendern;
	private JLabel jLabel6;
	private JButton btAendern;
	private JButton btAnlegen;
	private JButton btLeeren;
	private JButton btBeenden;
	private JTextField tfbetrag;
	private JTextField tfbez;
	private JTextField tfktonr;

	
	//Kontenobjekt --> Konstruktor auf Public, sonst kein Sinn
	Erfolgskonten objKonto = new Erfolgskonten ();
	
	
	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				CHauptfenster inst = new CHauptfenster();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public CHauptfenster() {
		super("Erfolgskonten von ------------>  Jürgen Joos");
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			this.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("paketUnternehmensergebnis/erfolg.jpg")).getImage());
			getContentPane().setBackground(new java.awt.Color(162,226,114));
			{
				jLabel1 = new JLabel();
				getContentPane().add(jLabel1);
				jLabel1.setText("Erfolgskonten");
				jLabel1.setBounds(254, 12, 254, 16);
				jLabel1.setBackground(new java.awt.Color(128,128,192));
				jLabel1.setForeground(new java.awt.Color(0,0,0));
			}
			{
				jLabel2 = new JLabel();
				getContentPane().add(jLabel2);
				jLabel2.setText("Kontennummer");
				jLabel2.setBounds(37, 54, 157, 16);
			}
			{
				jLabel3 = new JLabel();
				getContentPane().add(jLabel3);
				jLabel3.setText("Bezeichnung");
				jLabel3.setBounds(37, 82, 163, 16);
			}
			{
				jLabel4 = new JLabel();
				getContentPane().add(jLabel4);
				jLabel4.setText("Betrag");
				jLabel4.setBounds(37, 110, 163, 16);
			}
			{
				jLabel5 = new JLabel();
				getContentPane().add(jLabel5);
				jLabel5.setText("Aufwand oder Ertrag?");
				jLabel5.setBounds(37, 138, 163, 16);
			}
			{
				tfktonr = new JTextField();
				getContentPane().add(tfktonr);
				tfktonr.setBounds(212, 51, 199, 22);
			}
			{
				tfbez = new JTextField();
				getContentPane().add(tfbez);
				tfbez.setBounds(212, 79, 199, 22);
			}
			{
				tfbetrag = new JTextField();
				getContentPane().add(tfbetrag);
				tfbetrag.setBounds(212, 107, 199, 22);
			}
			{
				btBeenden = new JButton();
				getContentPane().add(btBeenden);
				btBeenden.setText("Programm schließen");
				btBeenden.setBounds(459, 48, 124, 22);
				btBeenden.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btBeendenActionPerformed(evt);
					}
				});
			}
			{
				btLeeren = new JButton();
				getContentPane().add(btLeeren);
				btLeeren.setText("Felder leeren");
				btLeeren.setBounds(459, 80, 124, 22);
				btLeeren.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btLeerenActionPerformed(evt);
					}
				});
			}
			{
				btAnlegen = new JButton();
				getContentPane().add(btAnlegen);
				btAnlegen.setText("Neu anlegen");
				btAnlegen.setBounds(459, 108, 124, 22);
				btAnlegen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btAnlegenActionPerformed(evt);
					}
				});
			}
			{
				btAendern = new JButton();
				getContentPane().add(btAendern);
				btAendern.setText("Felder ändern");
				btAendern.setBounds(459, 136, 124, 22);
				btAendern.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btAendernActionPerformed(evt);
					}
				});
			}
			{
				btLoeschen = new JButton();
				getContentPane().add(btLoeschen);
				btLoeschen.setText("Aus DB löschen");
				btLoeschen.setBounds(459, 163, 124, 22);
				btLoeschen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btLoeschenActionPerformed(evt);
					}
				});
			}
			{
				jLabel6 = new JLabel();
				getContentPane().add(jLabel6);
				jLabel6.setText("Betrag ändern");
				jLabel6.setBounds(37, 169, 163, 16);
			}
			{
				tfAendern = new JTextField();
				getContentPane().add(tfAendern);
				tfAendern.setBounds(212, 166, 199, 22);
			}
			{
				btErhoehen = new JButton();
				getContentPane().add(btErhoehen);
				btErhoehen.setText("Erhöhen");
				btErhoehen.setBounds(144, 207, 68, 33);
				btErhoehen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btErhoehenActionPerformed(evt);
					}
				});
			}
			{
				btVermindern = new JButton();
				getContentPane().add(btVermindern);
				btVermindern.setText("Vermindern");
				btVermindern.setBounds(238, 207, 76, 33);
				btVermindern.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btVermindernActionPerformed(evt);
					}
				});
			}
			{
				ComboBoxModel jComboBox1Model = 
					new DefaultComboBoxModel(
							new String[] { "Aufwand", "Ertrag" });
				jComboBox1 = new JComboBox();
				getContentPane().add(jComboBox1);
				jComboBox1.setModel(jComboBox1Model);
				jComboBox1.setBounds(212, 135, 199, 22);
				
			}
			{
				taAusgabe = new JTextArea();
				getContentPane().add(taAusgabe);
				taAusgabe.setBounds(37, 289, 546, 82);
			}
			{
				jLabel7 = new JLabel();
				getContentPane().add(jLabel7);
				jLabel7.setText("Klicke auf \"Anzeigen\", um dir das Konto hier anzusehen:");
				jLabel7.setBounds(37, 267, 546, 16);
			}
			{
				btAnzeigen = new JButton();
				getContentPane().add(btAnzeigen);
				btAnzeigen.setText("Anzeigen");
				btAnzeigen.setBounds(459, 196, 124, 22);
				btAnzeigen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btAnzeigenActionPerformed(evt);
					}
				});
			}
			pack();
			this.setSize(624, 453);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void btErhoehenActionPerformed(ActionEvent evt) {
	
	boolean jaErhöhen=true;
	this.objKonto.setBetrag(Float.parseFloat(this.tfbetrag.getText()));
	
	float BÄndern = (Float.parseFloat(this.tfAendern.getText()));
	this.objKonto.przBetragändern(BÄndern, jaErhöhen);
	
	
	
	}
	
	private void btVermindernActionPerformed(ActionEvent evt) {
		
	boolean jaErhöhen=false;
	this.objKonto.setBetrag(Float.parseFloat(this.tfbetrag.getText()));
	
	float BÄndern = (Float.parseFloat(this.tfAendern.getText()));
	this.objKonto.przBetragändern(BÄndern, jaErhöhen);
		
	}
	
	private void btBeendenActionPerformed(ActionEvent evt) {
		
		System.exit(0);
		
	}
	
	private void btLeerenActionPerformed(ActionEvent evt) {
		
		this.tfAendern.setText("");
		this.tfbetrag.setText("");
		this.tfbez.setText("");
		this.tfktonr.setText("");
		this.taAusgabe.setText("");
		
	}
	
	private void btAnlegenActionPerformed(ActionEvent evt) {
		
		this.objKonto.setKtonr(this.tfktonr.getText());
		this.objKonto.setBezeichnung(this.tfbez.getText());
		this.objKonto.setBetrag(Float.parseFloat(this.tfbetrag.getText()));
		this.objKonto.setAe(this.jComboBox1.getToolTipText());
		
		this.objKonto.erfassen();
		
	}
	
	private void btAendernActionPerformed(ActionEvent evt) {
		
		this.objKonto.setKtonr(this.tfktonr.getText());
		this.objKonto.setBezeichnung(this.tfbez.getText());
		this.objKonto.setBetrag(Float.parseFloat(this.tfbetrag.getText()));
		this.objKonto.setAe(this.jComboBox1.getToolTipText());
		this.objKonto.korrigieren();
		
	}
	
	private void btLoeschenActionPerformed(ActionEvent evt) {
		
		this.objKonto.setKtonr(this.tfktonr.getText());
		
		this.objKonto.loeschen();
		
	}
	
	private void btAnzeigenActionPerformed(ActionEvent evt) {
		
		this.objKonto.setKtonr(this.tfktonr.getText());
		this.objKonto.suchen();
		this.objKonto.zuweisen();
		//siehe weiter unten
		this.anzeigen();
		
	}
	
	void anzeigen()
	{
		String liste;
		liste = "Kontonummer:  "+this.objKonto.getKtonr()+"\n"+
				"Bezeichnung:  "+this.objKonto.getBezeichnung()+"\n"+
				"Betrag:       "+this.objKonto.getBetrag()+"\n"+
				"Aufw./Ertrag?:"+this.objKonto.getAe();
		
		
		this.taAusgabe.append(liste);
	}

	
	
		}
```



Im Anhang habe ich nochmal die Bilder (Access und das Gui Fenster abgebildet).
Wäre für eine HIlfe sehr dankbar.


----------



## Hogli (10. Feb 2010)

Hallo,
die Combobox wird wohl falsch ausgelesen.

Die Zeile

```
this.objKonto.setAe(this.jComboBox1.getToolTipText());
```
 
sollte durch

```
this.objKonto.setAe((String)this.jComboBox1.getSelectedItem());
```

ersetzt werden.

Grüße Hogli


----------



## jockijo (11. Feb 2010)

Ah, jetzt funzt es auch, vielen dank


----------

