# Dringende Hilfe -> Schulprojekt:  Java Datenbank Anbindung



## Russia (24. Mai 2011)

Hallo liebe Community,
Brauche dringend Hilfe für ein Schulprojekt
Hab hier erstmal ein Testprogramm geschrieben, welches das Ergebnis einer SQL Abfrage in einer ganz einfachen GUI ausgeben soll, jedoch erhalte ich keinerlei Ausgabe in der GUI
Könntet ihr mir bitte helfen
Hier die 3 Klassen:


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

public class DB_Abfrage
{

	

  
   private String Antwort1;

    void sucheArtikel()
    {
		ResultSet ergebnismenge;
		String mSQL;
		
		DBZugriff aktuellerZugriff = new DBZugriff();
		aktuellerZugriff.oeffneDB();
		mSQL = "SELECT Antwort1  FROM leicht ";         // Tabelle heißt: leicht    // Antwort1 = Name der 3ten Spalte      	 
	    mSQL = mSQL + "WHERE Nr = '2';";                // Nr = erste Spalte
        ergebnismenge = aktuellerZugriff.lesen(mSQL);
        
      try
      {
        ergebnismenge.next();
       int Nr = ergebnismenge.getInt("Nr");
        Antwort1 = ergebnismenge.getString(Antwort1);
        System.out.println(Antwort1);
    
       }
         catch (SQLException err)
          {
      
          }
      
       aktuellerZugriff.schliesseDB() ;
    }
	





}
```






```
package Paket;

import javax.swing.*;
import java.sql.*;

public class DBZugriff extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// Variablen für den Verbindungsaufbau
	Connection mdbArtikel = null; // Verbindungsobjekt
	String mDB; // Variable für den Treiber und den Pfad zur DB
	Statement stmtSQL = null; // Objekt für die Ausführung von SQL-Anweisungen
	
	

	void oeffneDB() {
		try{
			// mit nativem Treiber
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			mdbArtikel = DriverManager.getConnection("jdbc:mysql://localhost/wwm", "root", "");
			stmtSQL = mdbArtikel.createStatement();
			// DBVerbindung wird aufgebaut
		} catch (Exception fehler) {
			System.out.println("DB-Fehler: " + fehler);
		}

	}


	void schliesseDB() {
		try {
			stmtSQL.close();
			mdbArtikel.close();
		} catch (SQLException err) {
			System.err.println(err);
		}
	}

	ResultSet lesen(String pSQL) {
		ResultSet rs;

		try {
			rs = stmtSQL.executeQuery(pSQL);
			return rs;
		} catch (SQLException err) {
			System.err.println(err);
			rs = null;
			return rs;
		}

	}
}
```





```
package Paket;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.awt.Rectangle;
import javax.swing.JButton;

public class Fensterklasse extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JTextField jT_Frage = null;
	private JButton jButton = null;

	/**
	 * This is the default constructor
	 */
	public Fensterklasse() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(669, 342);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJT_Frage(), null);
			jContentPane.add(getJButton(), null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jT_Frage	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJT_Frage() {
		if (jT_Frage == null) {
			jT_Frage = new JTextField();
			jT_Frage.setBounds(new Rectangle(105, 32, 424, 46));
		}
		return jT_Frage;
	}

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(252, 104, 168, 47));
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					DB_Abfrage Abfrage = new DB_Abfrage();
					
					Abfrage.sucheArtikel();
					
					
					
					jT_Frage.setText(Antwort1);
					
				}
			});
		}
		return jButton;
	}

	
	String Antwort1;  
	
	public String getAntwort1()
	{
		return Antwort1;
	}
	public void setAntwort1(String Antwort1)
	{
		this.Antwort1 = Antwort1;
	}
	
	
	
	
}  //  @jve:decl-index=0:visual-constraint="10,10"
```




Danke schon einmal für eure Hilfe, ich möchste Wissen wie ich das Ergebnis von SQL Abfragen in der GUI ausgeben kann, kann es bisher nur in der Konsole ansehn.


----------



## Russia (24. Mai 2011)

Die SQL Datenbank:


```
-- phpMyAdmin SQL Dump
-- version 3.1.3.1
-- phpMyAdmin
--
-- Host: localhost
-- Erstellungszeit: 24. Mai 2011 um 21:58
-- Server Version: 5.1.33
-- PHP-Version: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Datenbank: `wwm`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `leicht`
--

CREATE TABLE IF NOT EXISTS `leicht` (
`Nr` int(11) NOT NULL AUTO_INCREMENT,
`Frage` text NOT NULL,
`Antwort1` text NOT NULL,
`Antwort2` text NOT NULL,
`Antwort3` text NOT NULL,
`Antwort4` text NOT NULL,
`Loesung` text NOT NULL,
PRIMARY KEY (`Nr`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Daten für Tabelle `leicht`
--

INSERT INTO `leicht` (`Nr`, `Frage`, `Antwort1`, `Antwort2`, `Antwort3`, `Antwort4`, `Loesung`) VALUES
(1, 'Wie nennt man großen Wirbel um eine berühmte Persönlichkeit?', 'Prominentenkirmes', 'Starrummel ', 'VIP-Jahrmarkt', 'Götterzirkus', 'b'),
(2, ' Wie heiße ich? ', ' Bernd ', ' Tobias ', ' Manuel ', ' Thomas ', 'a'),
```


starten tu ich das Projekt, vorerst in Eclipse über Java Bean die Fensterklasse


----------



## Parantatatam (24. Mai 2011)

Ich glaube, dass du hier viele, die dir helfen wollen, damit verkraulst, dass du deinen Quelltext nicht in die entsprechenden Tags gesetzt hast. Als Hinweis: es gibt *[code=java][/code]* und *[code=java][/code]*


----------



## xanadoo (24. Mai 2011)

Da kann ich nur zustimmen.
Ich habe jetzt auch nicht alles genau angeschaut, da es so nicht wirklich übersichtlich ist.

Aber auf den ersten Blick würde ich sagen, dass der String welchen du in deiner Fensterklasse in das Textfeld schreibst nie initialisiert wird.


----------



## Russia (24. Mai 2011)

Tut mir leid, bin neu im Forum.
Habs gleich geändert 

Wie meinst du das xanadoo, könntest du es bitte einfügen wie du meinst ?


----------



## Technoblade (24. Mai 2011)

Das ist recht einfach. Du speicherst zwar das Ergebnis der SQL-Abfrage in deiner Variable Antwort1 aber dieser gelangt niemals zum GUI. Du musst auch wissen, dass es bei den ganzen Antwort1-Variablen die du in den verschiedenen Klassen hast nicht um die selbe Variable handelt. Änderst du also dein Antwort1 in der Fensterklasse ändert es sich nicht in DBAbfrage.

Du musst dir also von sucheArtikel auch das Ergebnis zurückgeben lassen (Rückgabewert von void auf String ändern und anstelle von Antwort1 = ergebnismenge.getString() ... 
return ergebnismenge.getString() ...) und dann in der Fensterklasse Antwort1 aufdenentsprechenden Wert setzen(Also in Zeile 81 Anfrage1 = Abfrage.sucheArtikel()


----------



## Russia (25. Mai 2011)

Kannst du mir bitte den gefallen tun, und es im Quellcode von oben einfügen


----------



## Akeshihiro (25. Mai 2011)

In der Klasse DB_Abfrage in der Zeile 28 gibst du das Ergebnis via System.out.println() aus. Das musst du ändern, und zwar anstatt der Kommandozeilenausgabe müsste da die Ausgabe oder Werteübergabe für die GUI stattfinden. Im einfachsten Fall greifst du direkt auf dein Textfeld oder was auch immer zu und setzt den Text. Das machen viele und man sieht es auch entsprechend oft, ist aber Murks. Besser ist, wenn man zusätzliche Methoden deklariert und somit den eigentlichen Prozess (also z.B. das Einfügen/Setzen eines Textes in ein Textfeld) kapselt. So entstehen Schnittstellen, die man dann auch extrahieren und für andere Sachen nutzen kann, z.B. für die Ausgabe auf der Kommandozeile oder in einer GUI, und man müsste den Code kaum ändern, weil die Aufrufe alle gleich sind, lediglich das Ziel wäre ein anderes.

Ach, und die Klasse DB_Zugriff von JFrame abzuleiten ist nicht sonderlich sinnvoll und verwendest du auch nicht als grafisches Element, daher das "extends JFrame" da raus nehmen.


----------



## MiMi (25. Mai 2011)

Russia hat gesagt.:


> Kannst du mir bitte den gefallen tun, und es im Quellcode von oben einfügen


 
Wir machen keine Hausaufgeben ^^
Versuche zu verstehen was die Leute hier dir versuchen zu sagen, sie versuchen dir zu helfen in ihrer freien Zeit. Also gib dir doch etwas Muehe und versuche es umzusetzen!

Aso, Methodennamen und Variablennamen schreibt man klein, Klassennamen gross


----------



## Russia (25. Mai 2011)

Ich habe hier eine komplett  überarbeitete Version der Klassen gemacht, allerdings finde ich den Fehler nicht, warum die Variablen nicht übergeben werden von der Klasse "Steuerung" zur Klasse "Spiel".
Die Ausgabe auf der Konsole funktioniert.
Allerdings funktioniert die Übergabe nicht, wenn ich auf den extra angelegten Start Button klicke, wonach die Variablen in der GUI erscheinen sollten.


Auch wenn statt void "String" schreibe,  in Z.114...  return davor setze und den anderen Tip befolge, was ich in die andere Klasse schreiben muss, funktioniert es nicht, bzw. was gib ich falsch ein, und was muss ich abändern damit es funktioniert ?
Steh grade voll auf dem Schlauch....




```
package WWM_Paket;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.Rectangle;
import javax.swing.JLabel;
import javax.swing.JToggleButton;

public class Spiel extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton jB_Antwort1 = null;
	private JButton jB_Antwort3 = null;
	private JButton jB_Antwort2 = null;
	private JButton jB_Antwort4 = null;
	private JLabel jL_Frage = null;
	private JLabel jL_Nummer = null;
	private JToggleButton jT_Musik = null;
	private JToggleButton jT_Joker1 = null;
	private JToggleButton jT_Joker2 = null;
	private JButton jB_Start = null;

	/**
	 * This is the default constructor
	 */
	public Spiel() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(686, 361);
		this.setContentPane(getJContentPane());
		this.setTitle("Wer wird Millionär");
	}

	
	String Frage;
	String Antwort1;  //  @jve:decl-index=0:
	String Antwort2;  //  @jve:decl-index=0:
	String Antwort3;  //  @jve:decl-index=0:
	String Antwort4;
	String Loesung;
	
	

	
	public String getFrage()
	{
		return Frage;
	}
	public void setFrage(String Frage)
	{
		this.Frage = Frage;
	}

	
	
	public String getAntwort1()
	{
		return Antwort1;
	}
	public void setAntwort1(String Antwort1)
	{
		this.Antwort1 = Antwort1;
	}
	
	
	
	public String getAntwort2()
	{
		return Antwort2;
	}
	public void setAntwort2(String Antwort2)
	{
		this.Antwort2 = Antwort2;
	}
	
	
	
	
	public String getAntwort3()
	{
		return Antwort3;
	}
	public void setAntwort3(String Antwort3)
	{
		this.Antwort3 = Antwort3;
	}
	
	
	
	public String getAntwort4()
	{
		return Antwort4;
	}
	public void setAntwort4(String Antwort4)
	{
		this.Antwort4 = Antwort4;
	}
	
	
	
	public String getLoesung()
	{
		return Loesung;
	}
	public void setLoesung(String Loesung)
	{
		this.Loesung = Loesung;
	}
	
	
	
	
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jL_Nummer = new JLabel();
			jL_Nummer.setBounds(new Rectangle(582, 74, 78, 34));
			jL_Nummer.setText("");
			jL_Frage = new JLabel();
			jL_Frage.setBounds(new Rectangle(12, 117, 650, 51));
			jL_Frage.setText("");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJB_Antwort1(), null);
			jContentPane.add(getJB_Antwort3(), null);
			jContentPane.add(getJB_Antwort2(), null);
			jContentPane.add(getJB_Antwort4(), null);
			jContentPane.add(jL_Frage, null);
			jContentPane.add(jL_Nummer, null);
			jContentPane.add(getJT_Musik(), null);
			jContentPane.add(getJT_Joker1(), null);
			jContentPane.add(getJT_Joker2(), null);
			jContentPane.add(getJB_Start(), null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jB_Antwort1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJB_Antwort1() {
		if (jB_Antwort1 == null) {
			jB_Antwort1 = new JButton();
			jB_Antwort1.setBounds(new Rectangle(17, 181, 321, 51));
		}
		return jB_Antwort1;
	}

	/**
	 * This method initializes jB_Antwort3	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJB_Antwort3() {
		if (jB_Antwort3 == null) {
			jB_Antwort3 = new JButton();
			jB_Antwort3.setBounds(new Rectangle(16, 257, 322, 42));
		}
		return jB_Antwort3;
	}

	/**
	 * This method initializes jB_Antwort2	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJB_Antwort2() {
		if (jB_Antwort2 == null) {
			jB_Antwort2 = new JButton();
			jB_Antwort2.setBounds(new Rectangle(352, 183, 312, 51));
		}
		return jB_Antwort2;
	}

	/**
	 * This method initializes jB_Antwort4	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJB_Antwort4() {
		if (jB_Antwort4 == null) {
			jB_Antwort4 = new JButton();
			jB_Antwort4.setBounds(new Rectangle(348, 257, 318, 47));
		}
		return jB_Antwort4;
	}

	/**
	 * This method initializes jT_Musik	
	 * 	
	 * @return javax.swing.JToggleButton	
	 */
	private JToggleButton getJT_Musik() {
		if (jT_Musik == null) {
			jT_Musik = new JToggleButton();
			jT_Musik.setBounds(new Rectangle(570, 30, 90, 26));
			jT_Musik.setText("Musik ein");
		}
		return jT_Musik;
	}

	/**
	 * This method initializes jT_Joker1	
	 * 	
	 * @return javax.swing.JToggleButton	
	 */
	private JToggleButton getJT_Joker1() {
		if (jT_Joker1 == null) {
			jT_Joker1 = new JToggleButton();
			jT_Joker1.setBounds(new Rectangle(9, 24, 117, 29));
			jT_Joker1.setText("50/50 Joker");
		}
		return jT_Joker1;
	}

	/**
	 * This method initializes jT_Joker2	
	 * 	
	 * @return javax.swing.JToggleButton	
	 */
	private JToggleButton getJT_Joker2() {
		if (jT_Joker2 == null) {
			jT_Joker2 = new JToggleButton();
			jT_Joker2.setBounds(new Rectangle(7, 61, 121, 29));
			jT_Joker2.setText("Telefonjoker");
		}
		return jT_Joker2;
	}

	/**
	 * This method initializes jB_Start	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJB_Start() {
		if (jB_Start == null) {
			jB_Start = new JButton();
			jB_Start.setBounds(new Rectangle(308, 84, 75, 23));
			jB_Start.setText("Start");
			jB_Start.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					Steuerung steuerung = new Steuerung();
					
					steuerung.FrageHolen();
					
					jB_Antwort1.setText(getAntwort1());
					jB_Antwort2.setText(getAntwort2());
					jB_Antwort3.setText(getAntwort3());
					jB_Antwort4.setText(getAntwort4());
					
					jL_Frage.setText(getFrage());
					
				}
			});
		}
		return jB_Start;
	}

	
	
	
	
	
	
}  //  @jve:decl-index=0:visual-constraint="10,10"
```






```
package WWM_Paket;

import java.sql.ResultSet;

public class Steuerung {

	
	private String Frage;
	private String Antwort1;
	private String Antwort2;
	private String Antwort3;
	private String Antwort4;
	private String Loesung;
	private int Nr;
	private int Zufall = 2;
	
	
	

	public int getNr()
		{
			return Nr;
		}
	public void setNr(int Nr)
		{
			this.Nr = Nr;
		}

	
	
	public String getFrage()
	{
		return Frage;
	}
	public void setFrage(String Frage)
	{
		this.Frage = Frage;
	}

	
	
	public String getAntwort1()
	{
		return Antwort1;
	}
	public void setAntwort1(String Antwort1)
	{
		this.Antwort1 = Antwort1;
	}
	
	
	
	public String getAntwort2()
	{
		return Antwort2;
	}
	public void setAntwort2(String Antwort2)
	{
		this.Antwort2 = Antwort2;
	}
	
	
	
	
	public String getAntwort3()
	{
		return Antwort3;
	}
	public void setAntwort3(String Antwort3)
	{
		this.Antwort3 = Antwort3;
	}
	
	
	
	public String getAntwort4()
	{
		return Antwort4;
	}
	public void setAntwort4(String Antwort4)
	{
		this.Antwort4 = Antwort4;
	}
	
	
	
	public String getLoesung()
	{
		return Loesung;
	}
	public void setLoesung(String Loesung)
	{
		this.Loesung = Loesung;
	}
	
	
	
	
	
    void FrageHolen()
    {
		ResultSet ergebnismenge;
		String mSQL;
		
		DBZugriff aktuellerZugriff = new DBZugriff();
		aktuellerZugriff.oeffneDB();
		mSQL = "SELECT Frage, Antwort1, Antwort2, Antwort3, Antwort4, Loesung FROM leicht ";                  	 
		mSQL = mSQL + "WHERE Nr = '" + Zufall + "';";              
        ergebnismenge = aktuellerZugriff.lesen(mSQL);
        
     
        try {
			ergebnismenge.next();
			Frage = ergebnismenge.getString("Frage");
			Antwort1 = ergebnismenge.getString("Antwort1");
			Antwort2 = ergebnismenge.getString("Antwort2");
			Antwort3 = ergebnismenge.getString("Antwort3");
			Antwort4 = ergebnismenge.getString("Antwort4");
			Loesung = ergebnismenge.getString("Loesung");
			
			Spiel spiel = new Spiel();
			
			spiel.setFrage(Frage);
			spiel.setAntwort1(Antwort1);
			spiel.setAntwort2(Antwort2);
			spiel.setAntwort3(Antwort3);
			spiel.setAntwort4(Antwort4);
			spiel.setLoesung(Loesung);
			
			
			System.out.println(Frage + " "+ Antwort1 + " "+ Antwort2 + " "+ Antwort3 + " "+ Antwort4 + " "+ Loesung );
			
			
		} catch (Exception e) {
			System.out.println("error");
		}
	aktuellerZugriff.schliesseDB() ;
    }
	
	
	
}
```




```
package WWM_Paket;


import javax.swing.*;
import java.sql.*;

public class DBZugriff extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// Variablen für den Verbindungsaufbau
	Connection mdbArtikel = null; // Verbindungsobjekt
	String mDB; // Variable für den Treiber und den Pfad zur DB
	Statement stmtSQL = null; // Objekt für die Ausführung von SQL-Anweisungen
	
	
	void oeffneDB() {
		try{
			// mit nativem Treiber
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			mdbArtikel = DriverManager.getConnection("jdbc:mysql://127.0.0.1/wwm", "root", "");
			stmtSQL = mdbArtikel.createStatement();
			// DBVerbindung wird aufgebaut
		} catch (Exception fehler) {
			System.out.println("DB-Fehler: " + fehler);
		}

	}

	void aendern(String pSQL) {
		try {
			stmtSQL.executeUpdate(pSQL);
		} catch (SQLException err) {
			System.err.println(err);
			JOptionPane.showMessageDialog(this, "Fehler:..");
		}
	}

	void schliesseDB() {
		try {
			stmtSQL.close();
			mdbArtikel.close();
		} catch (SQLException err) {
			System.err.println(err);
		}
	}

	ResultSet lesen(String pSQL) {
		ResultSet rs;

		try {
			rs = stmtSQL.executeQuery(pSQL);
			return rs;
		} catch (SQLException err) {
			System.err.println(err);
			rs = null;
			return rs;
		}

	}
}
```


----------



## xanadoo (25. Mai 2011)

Weil du in der Klasse Steuerung eine neue Instanz der Klasse Spiel machst und dann die Werte aus der DB in diese neue Instanz schreibst.

Diese hat aber natürlich nichts mit der Instanz Spiel zu tun, aus welcher du die Suche gestartet hast.


----------



## Russia (25. Mai 2011)

Wie löse ich also das Problem ?


----------



## xanadoo (25. Mai 2011)

Wieso überarbeitest du denn das erste einfache Beispiel komplett, bevor du dieses zum laufen gebracht hast?
Das neue ist nicht wirklich einfacher...

Ich würde nicht Versuchen aus der Klasse Steuerung die Werte der GUI (Klasse Spiel) zu setzten,
sondern von der GUI die Werte der Klasse Steuerung zu lesen.
Alle nötigen Methoden hast du in der Klasse Steuerung ja schon deklariert und die Werte werden jetzt auch schon in den Variablen gespeichert.


----------



## Russia (25. Mai 2011)

Dankeee xanadoo


----------

