# Datenbankzugriffe, mehr Tabellen



## Andorian (23. Mrz 2009)

Hallo Leute, ich sitze gerade in nem Projekt fest und weis nicht weiter.

Also ich Porgrammiere nen Applet die auf eine Datenbank zugreift: einlesen, ausgeben etc.
Nun möchte ich im Applet definieren auf welche Tabelle er zugreifen soll in der Datenbank. 
Wie mach ich das? 
Mein Quellcode:
try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection conn = DriverManager.getConnection(datasource, "", "");
        PreparedStatement pstmt = conn.prepareStatement(
        "INSERT INTO 13112008 VALUES(?, ?, ?, ?, ?, ?, ?)"); // Hier die Tabelle 
         String PS= String.valueOf(Imax);               // Umwandeln IMAX in Text
         pstmt.setString(1, PS);                       // PS = erhöhter Primärschl. 
         pstmt.setString(2, tf1.getText());
         pstmt.setString(3, tf2.getText());
         pstmt.setString(4, tf3.getText());
         pstmt.setString(5, tf4.getText());
         pstmt.setString(6, tf5.getText());
         pstmt.setString(7, tf6.getText());

Am besten möchte ich gerne die Tabelle per Radiobutton definieren können. 
Also global ein radiobutton deklarieren die dann eine Tabelle darstellen soll, also klick radiobutton1 (Abteilung Einkauf) dann schreibt er die Daten in die "Abteilung Einkauf"!

Danke schonmal


----------



## SlaterB (23. Mrz 2009)

du musst beim Zusammenbau des SQL-String statt 13112008 den richtigen Tabellennamen verwenden,

was hat diese String-Bau-Aktion und sonst nur Berücksichtigung von GUI-Elementen mit Datenbankzugriff zu tun? 
lass erstmal alles mit DB weg und achte nur darauf, dass je nach korrekten GUI-Einstellungen ein passender String ausgegeben wird  
(entweder der SQL-String oder auch nur "Tabelle x ausgewählt"), fertig

-----

so, wie startest du denn eine Aktion? muss doch in irgendeinem ActionListener oder so in der GUI passieren?
an dieser Stelle fragst du eben den Inhalt von TextFeldern, ComboBoxen oder den Selektionsstatus von JRadioButtons oder was auch immer ab, 
und davon abhängig agierst du so wie du es für dich richtig hälst,

was genau ist dabei deine Frage? kennst du dich grundsätzlich nicht mit JRadio-Buttons aus?
-> Beispiele bei google,

oder in welchem genauen Schritt hakt es auf welche Weise?


----------



## Andorian (23. Mrz 2009)

Also

Das ich den richtigen Tabellennamen im Quellcode angebe ist mir klar, also in dem obigen Beispiel dann natürlich Abteilung Einkauf, so heist dann auch meine Tabelle in der Access Datenbank.

Das birgt auch alles nicht das problem denn in die Tabelle neue datensätze eintragen bzw. wieder auslesen oder löschen geht schon. 
Nur wenn ich dann mehrere Tabellen erstelle dann weis ich nicht wie ich es im Quellcode schreiben soll.
Bsp.
Eintragen von Mitarbeitern
Habe die Abteilung Einkauf und Abteilung Verkauf nun möchte ich jeweils einen Mitarbeiter für beide Abteilungen eintragen. 
Ich könnte ja theoretisch im Applet zwei RadioButtons erstellen: Also Einkauf, Verkauf.
Wenn ich also einen Mitarbeiter in die Abteilung Einkauf eintragen möchte klick ich den RadioButton Einkauf, gib in meine Textfelder seine Daten ein und fertig.

"INSERT INTO Einkauf VALUES(?, ?, ?, ?, ?, ?, ?)"); // Hier die Tabelle 
Hiermit sag ich dem Applet ja welche tabelle er verwenden soll. 
Nun wie heist aber das Statement, wenn ich Radiobuttons verwende um ihm die Tabelle zuzuordnen.

Ich hoffe ihr versteh was ich meine. Bin nicht so der Crack in sowas also bitte einfach ausdrücken 
Danke

EDIT: 
Sry falls ich mich bei der Themenbenennung versehen habe, bin gerade ein wenig im stress und zugzwang


----------



## SlaterB (23. Mrz 2009)

das Statement heißt if/ else + Programmierung


if (Einkauf selected [wie auch immer festzustellen]) {
// Insert for Einkauf
} else if (Verkauf selected [wie auch immer festzustellen]) {
// Insert for Verkauf
}

ganzen DB-Code zu duplizieren ist natürlich nicht so schön,
am besten in jedem if-Fall nur eine Methode mit bestimmten Parametern aufrufen oder so,
vielleicht ist ja nur der Tabellenname auszutauschen

das ist aber eine andere Aufgabe, grundlegend klingt das zunächst nach if/ else


----------



## Andorian (23. Mrz 2009)

Ok If Abfrage hab ich mir auch schon gedacht.

Aber kannst du mir ein konkretes Beispiel geben wie das geschrieben werden muss.

Muss das vor dem INSERT INTO, muss die Abfrage in das INSERT INTO etc.
Hab auch noch nie RadioButtons verwendet kenne das Statement nicht was ich sagen muss wenn ich den Button angeklickt habe.

Sry für diese vielen Fragen, kenn mich damit kaum aus, mus es aber leider machen


----------



## SlaterB (23. Mrz 2009)

im einfachsten Falle:

String tableName = null;
 if (jRadioButtonEinkauf.isSelected()) {
tableName = "Einkauf";
} else if (jRadioButtonVerkauf.isSelected()) {
tableName = "Verkauf";
} else {
throw new RuntimeException("so nun nicht");
}
...
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO "+tableName+" VALUES(?, ?, ?, ?, ?, ?, ?)"); 
...

usw.
falls die Anzahl der Parameter/ TextFelder unterschiedlich ist, wirds komplizierter 

mehr kann ich aus dem Kopf nicht sagen, du musst das schon alles selber programmieren, try & error,
wie gesagt: zu JRadioButtons kannst du bei google nach Beispielen suchen, oder in jedem guten Swing-Lehrbuch


----------



## Ebenius (23. Mrz 2009)

Wie immer von mir der Link in die Sun-Tutorials: How to Use Buttons, Check Boxes, and Radio Buttons.

Ebenius


----------



## bronks (23. Mrz 2009)

SlaterB hat gesagt.:


> ... usw. falls die Anzahl der Parameter/ TextFelder unterschiedlich ist, wirds komplizierter


Es wird so schon schwierig genug aus einem Applet ein PreparedStatement auf MS Access abzuschießen, falls nicht sogar unmöglich, wie ich meine.


----------



## Ebenius (23. Mrz 2009)

bronks hat gesagt.:


> Es wird so schon schwierig genug aus einem Applet ein PreparedStatement auf MS Access abzuschießen, falls nicht sogar unmöglich, wie ich meine.


Warum sollte das unmöglich sein? Entsprechende Policy vorausgesetzt ist mit Applets so ziemlich alles möglich, was mit Java möglich ist.

Ebenius


----------



## bronks (23. Mrz 2009)

Ebenius hat gesagt.:


> ... Entsprechende Policy vorausgesetzt ist mit Applets so ziemlich alles möglich, was mit Java möglich ist.


Entsprechender Policy und eingerichteter DNS auf jedem Rechner und einem eindeutigen Standort der MDB wird es daran scheitern, daß MS Access kein Prepare kennt.


----------



## Andorian (23. Mrz 2009)

Ok das mit der if Abfrage sieht gut aus versteh das auch soweit.
Nur kommt jetzt diese fehlermeldung

Error: D:\Projekt Sebastian_Heidt\Java Oberfläche Projekt\Frame1.java(274):  Method isSelected() not found in class java.awt.Checkbox.
          if (rb2.isSelected())

muss ich noch etwas importieren

[HIGHLIGHT="Java"]import java.awt.*;
import java.sql.*;
import javax.swing.JTable;
import java.applet.*;
import java.io.*;[/HIGHLIGHT]

das hab ich fehlt nun noch was?

EDIT:
Hat sich erledigt. DANKE nochmal


----------



## Onkel Hatti (27. Mrz 2009)

Hmm, ob es geschickt ist, AWT GUI Elemente mit Swing GUI Elementen zu mischen, ich weiss nicht...
Die Checkbox nimmst du aus dem AWT, die Table (JTable) aber aus dem Swing.
Und java.awt.Checkbox kennt tatsächlich kein "isSelected()". Dort wird der Status der Checkbox mit "getState()" ermittelt. Die JCheckBox aus dem Swing wiederum kennt "isSelected()".

Hatti


----------



## KSG9|sebastian (27. Mrz 2009)

Die scheinen jegliche Grundlagen für alles was Java angeht zu fehlen. Und dann willst du dir ne GUI-Anwendung mit DB-Zugriff zusammenkopieren und meinst dass es funktioniert?
Wenn du das machen musst und unter Zugzwang stehst dann wird es wohl nen guten Grund dafür geben? 

So mach das auf jeden Fall keinen Sinn. Erlern die Grundlagen, dann GUI, und irgendwann JDBC/DB-Zugriff.

Gruß Sebastian

P.S.: Bitte nicht schon wieder ein "Unser Lehrer kann nix erklären"/"Wir haben ja soooo wenig Zeit"


----------

