Datenbankanbindung mit einem JButton

Ci

Aktives Mitglied
Hallo,

ich versuch gerade verzweifelt einen Variablenwert in eine Datenbank zu laden!
Die Datenbankverbindung soll erst dann erfolgen, wenn ich einen Button angeklickt hab. In diesem Fall der Button pruefung abschliessen

Wenn ich die Datenbankverbindung in meine main() packe, dann funktioniert das laden des Variablenwertes. Wie gesagt, ich möchte die Verbindung zur Datenbank erst dann herstellen, wenn ich auf meinen Button geklickt hab.

hier mein Versuch bisher, leider mit Fehlermeldungen:

Java:
package getATR;

import java.awt.event.ActionEvent;

public class GUI_ATR extends JFrame{
	
	// Meine Button 
	public static JButton daten_pruefen = new JButton("<html>Daten<br>pruefen</html>");
	public static JButton pruefung_abschließen = new JButton("<html>Pruefung<br>abschliessen</html>");
	
	public static JLabel lblKartennr = new JLabel("* Karten-Nr.:");
	public static JFormattedTextField txtFKartennr = new JFormattedTextField();
	
	// das hier ist neu:
	public static String blabla = null;
	
	public static String b = "346";
	public static String c = "456";

	public Connection con;
	
	public static JTextArea textArea = new JTextArea();
	private final JScrollPane scrollPane = new JScrollPane();
	
	static File f;
	static String path_f;
	static int returnVal;
	
	
	public GUI_ATR(){
		
		setTitle("TEST");
		
		this.setVisible(true);
		setSize(1010, 532);
		setLocation(150, 100);
		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
		JPanel panel = new JPanel();
		getContentPane().add(panel);
		panel.setLayout(null);
		
		// Daten prüfen Button
		
		panel.add(daten_pruefen);
		daten_pruefen.setSize(70, 35);
		daten_pruefen.setLocation(5, 5);
	
		// Prüfung abschließen Button
		
		panel.add(pruefung_abschließen);
		pruefung_abschließen.setSize(95, 35);
		pruefung_abschließen.setLocation(350, 5);

		// Karten-Nr.:
		lblKartennr.setBounds(458, 259, 81, 14);
		panel.add(lblKartennr);
		lblKartennr.setVisible(false);
		
		txtFKartennr.setBounds(579, 256, 100, 20);
		panel.add(txtFKartennr);
		txtFKartennr.setDocument(new FixedSizeDocument(6));
		txtFKartennr.setVisible(false);
		
		// Text Area
		
		scrollPane.setBounds(5, 45, 440, 455);
		panel.add(scrollPane);
		scrollPane.setViewportView(textArea);
		
		addWindowListener(new meinWindowListener());

		
	/////////////////////////////////////////////////
	// Daten prüfen Button
	/////////////////////////////////////////////////
	
	
	daten_pruefen.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent e) {
		open_terminal();
		karteninhalt_auslesen.init_log_command_list();
			gui_leeren();
			open_terminal();
			if (Connect_Terminal.isTerminal_present() == true) {
				open_card();
				if (Connect_Card.isCard_present() == true) {
					
					lblKartennr.setVisible(true);
					txtFKartennr.setVisible(true);
					String inhalt = txtFKartennr.getText();
					System.out.println(inhalt);
					init_osVersion();
					try {
						
						//Karteninhalt ausgeben
						karteninhalt_auslesen.ausgabe_auswahl();
					
					} catch (CardException e1) {
						e1.printStackTrace();
					}
					
				} else {
					GUI_ATR.textArea.append("Keine Karte vorhanden");
					
				}
			} else {
				GUI_ATR.textArea.append("Chipkartenleser ist nicht eingesteckt");
			}
		}
	});
		
		/////////////////////////////////////////////////
		// Prüfung abschließen Button
		/////////////////////////////////////////////////
		
		pruefung_abschließen.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
		
			
			open_terminal();

			blabla = txtFKartennr.getText();
			System.out.println("Hier der Inhalt: " +blabla );
			gui_leeren();
			
			GUI_ATR.textArea.append("...Formular geleert!");
			
//------------------- ab hier Datenbanverbindung herstellen ------------------//
			
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			
			Connection con = DriverManager
					.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)}" 
								+ ";DBQ=C:/Dokumente und Einstellungen/dsv/Desktop/" 
								+ "Datenbank_Test.mdb");
			
			
			try {
				
				con.createStatement().executeUpdate("INSERT INTO Tabelle1 (ATC,Chipkartennummer,Kurz_BLZ) VALUES ('" + blabla + "','" + b + "','" + c + "') ");
                       } catch (SQLException sqle) {
                            sqle.printStackTrace();
                       }
                  con.close();
			}
		
		
		});
	}
	
	public void gui_leeren(){
		
		// um mein Textfeld zu leeren
		textArea.setText("");
		lblKartennr.setVisible(false);					
		txtFKartennr.setVisible(false);
		txtFKartennr.setText("");
	}
	
	public static void init_osVersion() {
		Inhalt_ATR.init_ATR();
		Inhalt_ATR.convert_atr();
		Inhalt_ATR.init_all_Maps();
		Inhalt_ATR.set_all_Variables();
	}
	

	public static void open_terminal() {
		Connect_Terminal.create_factory();
		try {
			Connect_Terminal.create_terminals(0);
		} catch (CardException e2) {
			textArea.append(e2.toString());
		} catch (Exception e2) {
			textArea.append(e2.toString());
		}
	}

	public static void open_card() {
		try {
			Connect_Card.newCard();
		} catch (CardException e1) {
			GUI_ATR.textArea.append(e1.toString());
		}
	}

	public static void File_chooser() throws IOException {
		JFileChooser fc = new JFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		returnVal = fc.showOpenDialog(null);

		if (returnVal == JFileChooser.APPROVE_OPTION) {
			setF(fc.getSelectedFile());
			setPath_f(f.getPath());
		}
	}

	public static File getF() {
		return f;
	}

	public static void setF(File f) {
		GUI_ATR.f = f;
	}

	public static String getPath_f() {
		return path_f;
	}

	public static void setPath_f(String path_f) {
		GUI_ATR.path_f = path_f;
	}


	public class meinWindowListener extends WindowAdapter {
		public void windowClosing(WindowEvent a) {
			System.exit(0);
		}
	}
}

Java:
package getATR;

import java.awt.EventQueue;

public class MainKlasse {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
			try {
				GUI_ATR frame = new GUI_ATR();
				frame.setVisible(true);

				
                    	} catch (Exception e) {
                    			e.printStackTrace();
                    	}
			
				}
	
			});
				
		}
}

hoff mir kann jmd. helfen

gruß
 
Zuletzt bearbeitet:

Ci

Aktives Mitglied
hier meine Fehlermeldungen:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
Unhandled exception type ClassNotFoundException
Unhandled exception type SQLException
Unhandled exception type SQLException

at getATR.GUI_ATR.<init>(GUI_ATR.java:148)
at getATR.MainKlasse$1.run(MainKlasse.java:11)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

klar kann man das alles nicht testen, aber ich möchte ja nur wissen, ob ich die Datenbankanbindung an der richtigen Stelle auch ordentlich aufrufe! Wenn ich nämlich den Code in meine main packe, funktioniert das auch alles schön. Wie gesagt, ich brauche das ganze auf dem Button!

das parallel laufende Thema sollte quasi das Selbe sein, nur wurde mir da aufmerksam gemacht, dass ich einige Codezeilen ünnötig im Code hab. Und so ist das eig. Thema untergegangen :(

gruß
 
Zuletzt bearbeitet:
S

SlaterB

Gast
eine Exception muss mit try/catch abgefangen oder mit throws weitergeworfen werden,
throws ist bei einem Listener nicht erlaubt, try/catch hast du überall im Programm nur in Zeile 148 bzw. in der Methode dort ist nirgendwo ein catch zu finden,
zudem ab Zeile 130 alles in das try

wenn du dafür ein Forum brauchst dann sehen wir dich ja hier ein Leben lang ;)
(Anstachelung bisschen mehr nachzudenken, dafür ist der Kopf über deinen Hals, nicht nur zum Forum-Beiträge formulieren)

> Wenn ich nämlich den Code in meine main packe, funktioniert das auch alles schön.

sowas im Zweifel ruhig auch posten als Vergleich
 
Zuletzt bearbeitet von einem Moderator:

Ci

Aktives Mitglied
hier im Abschnitt ist doch mein try/catch:

Java:
pruefung_abschließen.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
        
            
            open_terminal();
 
            blabla = txtFKartennr.getText();
            System.out.println("Hier der Inhalt: " +blabla );
            gui_leeren();
            
            GUI_ATR.textArea.append("...Formular geleert!");
            
//------------------- ab hier Datenbanverbindung herstellen ------------------//
            
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            
            Connection con = DriverManager
                    .getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)}" 
                                + ";DBQ=C:/Dokumente und Einstellungen/dsv/Desktop/" 
                                + "Datenbank_Test.mdb");
            
            
            try {
                
                con.createStatement().executeUpdate("INSERT INTO Tabelle1 (ATC,Chipkartennummer,Kurz_BLZ) VALUES ('" + blabla + "','" + b + "','" + c + "') ");
                       } catch (SQLException sqle) {
                            sqle.printStackTrace();
                       }
                  con.close();
            }
        
        
        });
    }

oder was meinst du genau?

na ja, wenn ich selbst draufkommen würde, dann würd ich ja nicht fragen. Du fragst doch die Frau auch nicht nach ihrem Alter, wenn du genau weißt, wie alt sie ist :)

...zum Thema nochmal. Wieso klappt das ganze in der main, aber nicht mit dem Button?
 
S

SlaterB

Gast
ich kenne deine main-Methode nicht und in deinem geposteten Code kannst du per Browser-Suche oder Texteditor nach 'catch' suchen, es ist einfach nicht vorhanden,
ein try alleine reicht nicht
 

Ci

Aktives Mitglied
hier meine Main wo es auch funktionierts:

Java:
package getATR;

import java.awt.EventQueue;

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

public class MainKlasse {

	public static karteninhalt_auslesen m = new karteninhalt_auslesen();
	public static String blabla = m.getAbc();

	public static String b = "111";
	public static String c = "456";
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
			try {
				GUI_ATR frame = new GUI_ATR();
				frame.setVisible(true);
					
				Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

				Connection con = DriverManager
						.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)}" 
									+ ";DBQ=C:/Dokumente und Einstellungen/xyz/Desktop/" 
									+ "Datenbank_Test.mdb");
					
					try { 
				           con.createStatement().executeUpdate("INSERT INTO Tabelle1 (ATC,Chipkartennummer,Kurz_BLZ) VALUES ('" + blabla + "','" + b + "','" + c + "') ");
				          
				       } catch (SQLException sqle) {
				            sqle.printStackTrace();
				       }
				       con.close();
					
			} catch (Exception e) {
					e.printStackTrace();
			}
			}
		});
	}	
}


und hier der Abschnitt mit try/catch:

Java:
try {
                
                con.createStatement().executeUpdate("INSERT INTO Tabelle1 (ATC,Chipkartennummer,Kurz_BLZ) VALUES ('" + blabla + "','" + b + "','" + c + "') ");
                       }catch (SQLException sqle) {
                            sqle.printStackTrace();
                       }
                  con.close();
            }
 
S

SlaterB

Gast
ok, da bin ich nun schuld, das catch ist doch vorhanden,
ich kann nur ausweichend über deine üble Einrückung lästern ;)
(sieht aus als gehört } in Zeile 8 zu { in Zeile 1)

wie schon gesagt gehören aber noch mehr Befehle in das try-catch hinein,
im Zweifel immer ganze Methodeninhalte, also von Beginn bis zum Ende des Listeners,
danach kannst du ja Schritt für Schritt ausprobieren was davor/ danach raus kann
 
Zuletzt bearbeitet von einem Moderator:

Ci

Aktives Mitglied
einverstanden. Werd mal probieren, aber wieso klappts in meiner main?

ist es, weil ich da meine Datenbankanbindung innerhalb eines zusätlichen try/catch gepackt hab?
 

Ci

Aktives Mitglied
habs jetzt mal einfach so ausprobiert:

Java:
pruefung_abschließen.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			open_terminal();
			try {
			blabla = txtFKartennr.getText();
			System.out.println("Hier der Inhalt: " +blabla );
			gui_leeren();
			
			GUI_ATR.textArea.append("...Formular geleert!");
			
//------------------- ab hier Datenbanverbindung herstellen ------------------//
			
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			
			Connection con = DriverManager
					.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)}" 
								+ ";DBQ=C:/Dokumente und Einstellungen/dsv/Desktop/" 
								+ "Datenbank_Test.mdb");
			
			try {
				con.createStatement().executeUpdate("INSERT INTO Tabelle1 (ATC,Chipkartennummer,Kurz_BLZ) VALUES ('" + blabla + "','" + b + "','" + c + "') ");
                       } catch (SQLException sqle) {
                            sqle.printStackTrace();
                       }
                  con.close();
			}catch (Exception e) {
					e.printStackTrace();
			}
		});
	}

...nur funktioniert das nicht! vllt. ne Idee ?

gruß
 

Ci

Aktives Mitglied
ok, hab das Problem gelöst. hier die Lösung:

Java:
pruefung_abschließen.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			open_terminal();
			try {
			blabla = txtFKartennr.getText();
			System.out.println("Hier der Inhalt: " +blabla );
			gui_leeren();
			
			GUI_ATR.textArea.append("...Formular geleert!");
			
//------------------- ab hier Datenbanverbindung herstellen ------------------//
			
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			
			Connection con = DriverManager
					.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)}" 
								+ ";DBQ=C:/Dokumente und Einstellungen/dsv/Desktop/" 
								+ "Datenbank_Test.mdb");
			
			try {
				con.createStatement().executeUpdate("INSERT INTO Tabelle1 (ATC,Chipkartennummer,Kurz_BLZ) VALUES ('" + blabla + "','" + b + "','" + c + "') ");
                       } catch (SQLException sqle) {
                            sqle.printStackTrace();
                       }
                  con.close();
			}catch (Exception a) {
					a.printStackTrace();
			}
		}
	});
	}

vielen dank. ung schönen Tag noch ;)
 
S

SlaterB

Gast
Fehlermeldung posten?
ich glaube aber einen Fehler in der Klammerung zu sehen,

mach den Listener erstmal komplett leer, leere Methode, bis das Kompilieren wieder geht,
dann nur das try/ catch mit leerem Inhalt einfügen bis das kompiliert
usw.,


schrittweise vorgehen, besonders wenn du die sinnvollen Exceptions bzw. hier eher Compiler-Error nicht lesen kannst
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
A Bestmögliche Entkopplung der Datenbankanbindung Datenbankprogrammierung 6
J Derby/JavaDB Datenbankanbindung Eclipse und Derby Datenbankprogrammierung 7
M Java Datenbankanbindung funktioniert nicht Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
Z PostgreSQL Java Servlets mit Datenbankanbindung Datenbankprogrammierung 3
B Datenbankanbindung JSP Datenbankprogrammierung 7
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
M Servlet in JSP anbinden // Datenbankanbindung in JSP Datenbankprogrammierung 8
S MySQL Datenbankanbindung extra Klasse Datenbankprogrammierung 10
C Pokergame + Datenbankanbindung (Wahrscheinlichkeiten) Datenbankprogrammierung 16
G Probleme mit Datenbankanbindung Datenbankprogrammierung 3
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
A Datenbankanbindung, Grundlagen Datenbankprogrammierung 2
D Datenbankanbindung unter Linux Datenbankprogrammierung 10
D DAtenbankanbindung im OO-Aufbau Datenbankprogrammierung 5
M vorschläge bzgl. java programm mit datenbankanbindung Datenbankprogrammierung 4
M Datenbankanbindung - Passwort schützen Datenbankprogrammierung 6
M Datenbankanbindung: Java - MySQL Datenbankprogrammierung 2
K Problem mit datenbankanbindung unter access 2003 Datenbankprogrammierung 3
C Datenbankanbindung ohne ODBC JDBC Brücke Datenbankprogrammierung 5
R Fehler in Datenbankanbindung Servlet -> Access Datenbankprogrammierung 5
P Datenbankanbindung (erstmal) zu Access Datenbankprogrammierung 3
S Datenbankanbindung + HTML + Applet Datenbankprogrammierung 7
M Datenbankanbindung in Java : Newbie-Frage Datenbankprogrammierung 2
H Datenbankanbindung MySQL per JDBC Datenbankprogrammierung 4
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
pkm PostgreSQL Auf eine Spalte kann aus einem Teil der SQL-Aussage nicht zugegriffen werden Datenbankprogrammierung 3
Dimax Hadoop : 2 SimpleNode cluster (eins mit windows und der andere mit opensuse) zu einem zusammenfügen. Datenbankprogrammierung 15
L SQLite Ändern der Daten in einem UNIQUE Feld Datenbankprogrammierung 1
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
S Abfrage von Gruppentickets(Mehrere Resorts an einem Tag) Datenbankprogrammierung 1
J SQL SELECT mit einem Array Datenbankprogrammierung 1
D Komplette Zeile lesen und einem Konstruktor übergeben. Datenbankprogrammierung 3
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
A Postgres, sql: Inkrementierung allgemein und bis zu einem bestimmten Wert Datenbankprogrammierung 5
Mrtwomoon Abfrage-Ergebnisse in einem Fenster darstellen Datenbankprogrammierung 8
R Derby/JavaDB Möglichkeit von einem Random Select! Datenbankprogrammierung 6
D Geschachtelte Transaktionen in einem DBMS Datenbankprogrammierung 3
A Datenbankverbindung mit einer Datenbank auf einem Webspace Datenbankprogrammierung 10
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
H Select in einem Select Datenbankprogrammierung 7
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
Z derby abfrage von einem Timestamp Datenbankprogrammierung 2
A Problem mit einem Select-Befehl Datenbankprogrammierung 5
H Daten aus einem DBS in ein zweites DBS überführen ? Datenbankprogrammierung 2
Y Hibernate - Hbm Files in einem separaten JAR - wie zugreifen Datenbankprogrammierung 6
V Datenbankabfrage in einem Textfeld ausgeben Datenbankprogrammierung 3
D kurze Frage zu einem Query Datenbankprogrammierung 6
G Suchen von Zahlen in einem Textfeld / SQL Server Datenbankprogrammierung 1
N Probleme mit Access-DB bei einem Webserver Datenbankprogrammierung 5
P [Hibernate] Mehrere Keys in einem <set> Datenbankprogrammierung 11
L DB Felder in einem Array speichern und wieder auslesen Datenbankprogrammierung 11
N Funktion um einen Wert in einem ResultSet zu finden ? Datenbankprogrammierung 5
L mehrere Abfragen mit einem Statement!? Datenbankprogrammierung 5
D brauche mal kurz hilfe bei einem select-stmt Datenbankprogrammierung 6
K Problem beim Einlesen von Werten aus einem Textfeld Datenbankprogrammierung 11
T Aus einem Array in Datenbank einlesen? Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben