# DB-Anbindung



## pepe (21. Jan 2010)

gute Morgen allerseits,

ich habe ein Problem.. ich bin grade an einem Programm mit dem ich Mitarbeiterverwaltung, lagerverwaltung und Bestellverwaltung usw machen kann. Nur funktionieren meine Buttons einfach nicht, schätze da ist irgendein Problem mit der DBAnbindung hier des Quelltext.. für mehr Informationen einfach Fragen

[JAVA=42]
package fenster;

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

import fenster.Bestellung;

/**
 */
/**
 */
public class DBAnbindung {

	// Verbindungsvariablen
	Connection dbVerbindung = null;
	Statement sqlAnweisung = null;
	String sqlString1 = "SELECT * FROM Bestellungen;";
	String sqlString2;
	String sqlString3 = "SELECT * FROM Mitarbeiter";
	String sqlString4;
	String sqlString5 = "SELECT * FROM Kunde;";
	String sqlString6;
	String sqlString7;

	ResultSet ergebnis = null;
	String dateiname;
	String datenbank;
	/**
	 */
	/**
	 */
	Bestellung aktuelleBestellung;
	Mitarbeiter aktuellerMitarbeiter;
	Kunde aktuellerKunde;


	// Konstriktoren
	public DBAnbindung() {
		// default
	}

	public DBAnbindung(Bestellung pBestellung) {
		aktuelleBestellung = pBestellung;
	}

	public DBAnbindung(Mitarbeiter pMitarbeiter) {
		aktuellerMitarbeiter = pMitarbeiter;
	}

	public DBAnbindung(Kunde paktuellerKunde) {
		aktuellerKunde = paktuellerKunde;
	}



	// Methoden

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



		// Verbindung herstellen
		try {
			// mit expliziter Pfadangabe
			dateiname = "D:/My Workspace/BeMiLa/Bestellungen.mdb";
			datenbank = "jdbcdbcriver={Microsoft Access Driver (*.mdb)};DBQ=" + dateiname;
			// vom TreiberManager die Verbindung verlangen
			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(sqlString1);
			ergebnis = sqlAnweisung.executeQuery(sqlString3);
			ergebnis = sqlAnweisung.executeQuery(sqlString5);
			// NEU hier alles raus und in das Hauptfenser !!!
		}
		catch (SQLException e) {
			System.out.println("Fehler beim DB-Zugriff!   " + e);
			System.exit(0);
		}
		return ergebnis;
	}

	public void aenderungSenden(Bestellung aktuelleBestellung) {
		try {
			sqlString2 = "INSERT INTO Bestellungen VALUES (" + aktuelleBestellung.getBestellnummer() + ", '" 
							+ aktuelleBestellung.getKundennummer() + "', " + 
aktuelleBestellung.getMitarbeitername() 
							+ ", " + aktuelleBestellung.getArtikelnummer() + ", " + 
aktuelleBestellung.getMenge()+ ");";
			sqlAnweisung = dbVerbindung.createStatement();
			sqlAnweisung.executeUpdate(sqlString2);
		}
		catch(SQLException err)   {
			System.err.println(err);

		}
	}

	public void aenderungSenden(Mitarbeiter aktuellerMitarbeiter) {
		try {
			sqlString4 = "INSERT INTO Mitarbeiter VALUES ('" + aktuellerMitarbeiter.getName()+ 
"', '" + aktuellerMitarbeiter.getVorname()+ "', '" 
			+ aktuellerMitarbeiter.getAbteilung()+  "', '" + aktuellerMitarbeiter.getOrt()+  
"', '" + aktuellerMitarbeiter.getPlz()+  "', '" + aktuellerMitarbeiter.getStrasse()+  "', '" + 
aktuellerMitarbeiter.getMitarbeiternummer()+ "');";
			System.out.println(sqlString2);
			sqlAnweisung = dbVerbindung.createStatement();
			sqlAnweisung.executeUpdate(sqlString4);
		}
		catch(SQLException err)   {
			System.err.println(err);

		}
	}

	public void aenderungSenden(Kunde aktuellerKunde) {
		try {
			sqlString6 = "INSERT INTO Kunde VALUES ('" + aktuellerKunde.getKundennummer()+ "', '" + 
aktuellerKunde.getName()+ "', '" +aktuellerKunde.getVorname()+ "', '" + aktuellerKunde.getStrasse()+ "', '" +
aktuellerKunde.getPlz()+ "', '" +aktuellerKunde.getOrt() + "');";
			sqlAnweisung = dbVerbindung.createStatement();
			sqlAnweisung.executeUpdate(sqlString6);
		}
		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);
		}
	}



}
[/code]


----------



## ARadauer (21. Jan 2010)

> Nur funktionieren meine Buttons einfach nicht


Was meinst du damit? Passiert nichts, kommt eine Fehlermeldung?


----------



## homer65 (21. Jan 2010)

Buttons? Was für Buttons?


----------



## MQue (21. Jan 2010)

Es gibt in deinem Code keine Buttons, Klasse mit Button posten,


----------



## pepe (21. Jan 2010)

Sorry das ganze Projekt ist zu lang um es hier zu Posten, habe es mal hochgeladen

RapidShare: 1-CLICK Web hosting - Easy Filehosting


----------



## SlaterB (21. Jan 2010)

du musst dringend über deine Art zu fragen/ Probleme zu erklären/ Code zu posten, nachdenken,
von Rapidshare wird das kaum einer laden, man kann Programme auch auf 50 Zeilen kürzen, alles was nicht Button ist fliegt aus der GUI raus,
obige Klasse ließe sich auch mit ein paar investierten Minuten in

```
class DBAnbindung {
    private Connection dbVerbindung;
    public void oeffneDB() throws Exception {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String dateiname = "D:/My Workspace/BeMiLa/Bestellungen.mdb";
        String datenbank = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + dateiname;
        dbVerbindung = DriverManager.getConnection(datenbank, "", "");
        System.out.println("DB-Verbindung erfolgreich hergestellt ...");
    }
    public ResultSet abfrageSenden() throws Exception {
        sqlAnweisung = dbVerbindung.createStatement();
        ergebnis = sqlAnweisung.executeQuery("dummy-Query");
        return ergebnis;
    }
    public void schliesseDB() throws Exception {
        sqlAnweisung.close();
        System.out.println("sqlAnweisung-Objekt vernichtet");
        dbVerbindung.close();
        System.out.println("DB-Verbindung geschlossen !");
    }
}
```
kürzen, wahrscheinlich hat es nichtmal was mit der DB zu tun, eine Dummy-Klasse, die einen String temporär speichert, wäre als Test genug,
die Buttons erstellen bestimmt jeweils ein neues Objekt statt das alte weiterzuverwenden oder ähnlich allgemeine Probleme


----------



## pepe (21. Jan 2010)

Sorry Java ist einfach nciht mein Ding und nun soll ich dieses Projekt ja mit 2 Mitschülern machen. Die zwei haben aber kaum Zeit bzw Lust da was zu machen deswegen hab ich beschlossen die Sache selbst mal in die Hand zu nehmen da es um meine Note geht ^^-.-
Und mit dem letzten Quelltext kann ich kaum was anfangen 
So kompliziert kann doch dieses Programm nicht sein. Also einfach nur Bestellungen Anlegen, Mitarbeiter anlegen und Artikel anlegen und ggf löschen, ändern. 
und ncoh eine Frage: wenn ich beim Bestellung erfassen eine Bestellnummer Automatisch vergeben will, wie mach ich das am besten? sollte quasi einfach bei 1000 anfangen und dann bei jeder neuen Bestellung 1 dazuzählen und in die Datenbank übertragen. Und das gleiche mit der Kundennummer, sodass ich für 2 kunden nicht mal zufällig die gleiche Nummer habe.

Vielen dank für die bisherigen Antworten und das Verständnis :/


----------



## Gast2 (21. Jan 2010)

pepe hat gesagt.:


> So kompliziert kann doch dieses Programm nicht sein. Also einfach nur Bestellungen Anlegen, Mitarbeiter anlegen und Artikel anlegen und ggf löschen, ändern.
> /



Je nachdem wieviel Java du kannst... Ich glaube du solltest dir erstmal die Basics aneignen, dass du überhaupt weißt was du da machst und dir nicht irgendwas zusammen kopierst.Hier wird dir keiner dein Programm machen


----------



## pepe (21. Jan 2010)

Ist mir schon klar  erwarte ich auch garnicht^^
bin nur leicht unter Druck aber ja okay
weiß jemand wenigstens ne Lösung wegen der Bestell,- bzw Kundennummern?


----------



## Gast2 (21. Jan 2010)

Das kannst du in deiner DB Tabelle machen, einfach ID Spalte setzen und dann kannst du einstellen dass er automatisch hochzählen soll... Kann bei jeder DB anders sein!
Und dann einfach ein Insert machen ohne die ID zu setzen!


----------



## pepe (21. Jan 2010)

Ja in der DB Tabelle bekomm ich das auchnoch hin aber ich muss dass ja irgendwie im Java Programm reinbekommen


----------



## Gast2 (21. Jan 2010)

pepe hat gesagt.:


> Ja in der DB Tabelle bekomm ich das auchnoch hin aber ich muss dass ja irgendwie im Java Programm reinbekommen



Versteh ich nicht?
Du machst einfach einen Insert und die DB vergibt automatisch die ID...


----------



## pepe (21. Jan 2010)

okay ja ich glaub jetzt hab ich verstanden 
Danke


----------



## Firestorm87 (21. Jan 2010)

```
static String PrimKey = "SELECT id FROM tabelle ORDER BY id DESC";

private int getNextPrimaryKey() {
		this.connect();
		Connection con = this.getConnection();

		Statement psPrimary = null;
		int key = 0;
		try {
			psPrimary = con.createStatement();
			ResultSet result = psPrimary.executeQuery(PrimKey);
			if (result.next()) {
				key = result.getInt("id");
			}
		} catch (SQLException e) {
			behandleSQLFehler(e);
		}
		this.disconnect();
		return key + 1;
	}
```

So habe Ich das gelöst um den nächsten Key selber auszulesen....


----------

