Datensätze in der Datenbank prüfen

sos

Mitglied
bitte leute ich möchte in meinem JDialog einen Namen eingeben und beim Druck auf anmelden soll geprüft werden ob diese Name in der Datenbank ist, den Dialog und Die Verbindung zur Datenbank hab ich erstellt nur die überprüfung bekomme ich nicht hin, freue mich wenn jemand mir zeigen oder erläutern würde wie das gehen soll

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JPanel;





public class Anmeldung extends javax.swing.JDialog{
	
	
	private static final long serialVersionUID = 1L;
	private javax.swing.JButton jBeenden ,jAnmelden;
	private javax.swing.JLabel lblTit, lblVor, lblNach, lblPass, lblUser;
	
	private javax.swing.JTextField txtNachname, txtPasswort, txtUser, txtVorname;;
	private javax.swing.JDesktopPane sysMeld;
	private String vorname;
	private String nachname;
	final String hostname = "localhost"; 
	final String port = "3306"; 
	final String dbname = "dbdemo2"; 
	final String user = "root"; 
	final String password = ""; 
	
	
	
	public Anmeldung(){
		
		this.setTitle ("Anmeldedialog");

		lblTit = new javax.swing.JLabel();
		
	        lblTit.setFont(new java.awt.Font("Tahoma", 1, 14)); 
	        lblTit.setText("Personalverwaltung - Zugang nur für Abteilungsleiter");
	        JPanel ap = new JPanel();
	        ap.add(lblTit);
	       
	        
	      //  this.add(lblTit, java.awt.BorderLayout.NORTH);
	        javax.swing.JPanel panel = new javax.swing.JPanel(new java.awt.GridBagLayout());
	        java.awt.GridBagConstraints cs = new java.awt.GridBagConstraints();
	        cs.fill = java.awt.GridBagConstraints.VERTICAL;
	        lblVor = new javax.swing.JLabel();
	        lblVor.setText("Vorname");
	        cs.gridx = 0;
	        cs.gridy = 0;
	        cs.gridwidth = 1;
	        panel.add(lblVor, cs);

	        txtVorname = new javax.swing.JTextField(10);
	        cs.gridx = 0;
	        cs.gridy = 1;
	        cs.gridwidth = 2;
	        panel.add(txtVorname, cs);
	      //Nachname Label und Textfeld  
	        lblNach = new javax.swing.JLabel();
	        lblNach.setText("Nachname");
	        cs.gridx = 10;
	        cs.gridy = 0;
	        cs.gridwidth = 1;
	        panel.add(lblNach, cs);

	        txtNachname = new javax.swing.JTextField(10);
	        cs.gridx = 10;
	        cs.gridy = 1;
	        cs.gridwidth = 2;
	        panel.add(txtNachname, cs);
	        //Passwort
	        lblPass = new javax.swing.JLabel();
	        lblPass.setText("Passwort");
	        cs.gridx = 20;
	        cs.gridy = 0;
	        cs.gridwidth = 1;
	        panel.add(lblPass, cs);

	        txtPasswort = new javax.swing.JTextField(10);
	        cs.gridx = 20;
	        cs.gridy = 1;
	        cs.gridwidth = 2;
	        panel.add(txtPasswort, cs);
	        //user
	        lblUser = new javax.swing.JLabel();
	        lblUser.setText("DB-Benutzername");
	        cs.gridx = 10;
	        cs.gridy = -10;
	        cs.gridwidth = 1;
	        panel.add(lblUser, cs);

	        txtUser = new javax.swing.JTextField(10);
	        cs.gridx = 20;
	        cs.gridy = -10;
	        cs.gridwidth = 2;
	        panel.add(txtUser, cs);
	        //Buttons
	        jAnmelden = new JButton("Anmelden");
	        jAnmelden.addActionListener(new ActionListener(){
	        	public void actionPerformed(ActionEvent evt){
	        		check();
	        	}
	        });
	        jBeenden = new JButton("Beenden");
	        jBeenden.addActionListener(new ActionListener() {
	  	      public void actionPerformed(ActionEvent evt) {
	  	       System.exit(0);
	  	      }
	  	    });
	        JPanel bp = new JPanel();
	        bp.add(jAnmelden);
	        bp.add(jBeenden);
	     
	           
	       
	     getContentPane().add(ap, BorderLayout.PAGE_START); 
	     getContentPane().add(bp, BorderLayout.PAGE_END); 
	     this.setSize(500, 350);
	     this.add(panel);
	   	this.setVisible(true);
		
	}
	Connection conn = null;

	
	
	public void check(){

        try { 
	    System.out.println("* Treiber laden"); 
      	    Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
        } 
        catch (Exception e) { 
            System.err.println("Unable to load driver."); 
            e.printStackTrace(); 
        } 
        //IN DIESEM TEIL HACKT ES
        //WIE SOLL DAS GEHEN ?
	try { 
	    System.out.println("* Verbindung aufbauen"); 
	    String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; 
	    conn = DriverManager.getConnection(url, user, password); 
	    System.out.println("* Statement beginnen"); 
        Statement stmt = conn.createStatement(); 
      

        System.out.println("* Abfrage beginnen"); 
        
        
        String selectString =" SELECT vorname, nachname FROM personen";
 
        ResultSet rs = stmt.executeQuery(selectString); 
    
        System.out.println("* Ergebnisse anzeigen"); 
    if (rs.next()) { 
  //  	
    this.vorname = rs.getString(vorname);
	   System.out.println("Person existiert");
    nachname = rs.getString(2); 
    
    System.out.println(vorname);
 
//
	
	}else{
		System.out.println("Person existiert nicht");
	}   System.out.println("* Statement beenden"); 
    stmt.close(); 
    System.out.println("* Datenbank-Verbindung beenden"); 
    conn.close(); 
    }catch(SQLException sqle){
    	 System.out.println("SQLException: " + sqle.getMessage()); 
         System.out.println("SQLState: " + sqle.getSQLState()); 
         System.out.println("VendorError: " + sqle.getErrorCode()); 
         sqle.printStackTrace(); 
     } 
	}
	

	    public static void main(String args[]) {
	        
	            	Anmeldung anmeldung = new Anmeldung();
	            	System.out.println(anmeldung);
	                
	            }

		public void setVorname(String vorname) {
			this.vorname = txtVorname.getText();
		}

		public String getVorname() {
			return vorname;
		}

		public void setNachname(String nachname) {
			this.nachname = txtNachname.getText();
		}

		public String getNachname() {
			return nachname;
		}
	        

}
 
Zuletzt bearbeitet von einem Moderator:
erstens : IMPORT
das sieht ja echt grausam mit all den absoluten Klassen-Namen aus
hier kannst du wirklich folgendes grob importieren
java.awt.*
java.awt.event.*
java.sql.*
javax.swing.*

zweitens : es reicht ein normales add() ... du brauchst kein getContentPane() mehr
drittens : woher hast du den Unsinn mit dem alten MySQL-Driver ... dieser ist nur noch aus Kompatibilitätsgründen vorhanden ... der richtige lautet : com.mysql.jdbc.Driver
viertens : du lässt eine I/O-Operation innerhalb des EDT ablaufen ... hier hast du einige Design-Fehler welche man von anfang an neu konzipieren müsste
fünftens : warum in einem JDialog ? ... dann hast du unten in der Taskleiste kein Icon zum draufklicken ...
sechstens : du brauchst die serialUID nur wenn du das Interface Serializable implementieren willst

Du siehst also das du hier einige schwerwiegende Fehler drin hast ...
Mit welcher Entwicklungsumgebung arbeitest du das die dir sowas da "hinzaubert" ? Woher hast du die Information den alten Driver zu nutzen ? Hast du erfahrung mit dem was du da vor hast oder ist das Neuland für dich ?
 
dazu sage ich nur FERNSTUDIUM , ich weiss dass da einige "Fehler" drin sind , es funktioniert aber soweit

...1)IMPORT meine super.dozenten wollen dass ich den beweise dass ich ausserhalb einer entwicklungsumgebung arbeiten kann
2) wo in mein Code ist ein getContenPane ?
3) den Driver benutze ich aus einem CD geliefert von den, wenn du das nicht einsiehst weil das anders geht klär mich bitte auf!
4) Design spielt hier kaum eine Rolle, auf diese Aufgabe komme ich später zurück wenn das wesentliche funktioniert
5) was meinst du mit Icon zum drauf klicken ? ich hab einen Button zum drauf klicken , das reicht mir schon
6)verstehe ich nicht

7)f die eigentliche Frage war wie ich Datensätze prüfe ob die in der DB vorhanden sind nämlich wenn ich einen Vorname und Nachname eingebe und auf anmelden klicke, alles andere ist erstmal egal, kannst du mir bitte da helfen ****

Danke dafür dass du mir wieder einmal klar gemacht hast dass Fernstudium sch... ist :)
 
Zuletzt bearbeitet:
1) Was bitte haben IMPORT-Anweisungen mit einer IDE zu tun ?
Wer bitte hat dir eingetrichtert das du immer den vollen Namen einer Klasse inklusive Paket angeben musst ? Genau dafür gibt es eben die import-Anweisungen am Anfang einer Klasse ... wenn du dir das so aneignest und weiterhin danach vorgehst wirst du eine ganze Menge extra-schreibarbeit haben ...
2) Zeile 121 / 122
3) Was heißt ihr "wenn ich das nicht einsehe" ... geh doch mal bitte selbst auf http://mysql.com ... dann in die Rubik Downloads ... dann auf Connectors ... und dann auf den Connector/J ... dort steht in der OFFIZIELLEN Doc das die Driver-Datei org.gjt.mm.mysql.Driver lediglich aus Kompatibilitätsgründen vorhanden ist. Bei neu-Entwicklungen sollte man aber immer die neue Variante com.mysql.jdbc.Driver verwenden.
4) Ähm ... es ist UMSTÄNDLICH erst die Logik zu implementieren und DANN alles noch mal auseinander zu nehmen und umzubauen nur weil man sich am Anfang keine Gedanken über das Design gemacht hat. Erwarte hier mit dieser Einstellung also nicht all zu viel Hilfe.
5) Ich meine es doch nicht in deinem Programm sondern IN DER TASKLEISTE ... da wo alle offenen Fenster ihren Bereich bekommen wo man bequem draufklicken kann um das Fenster in den Vordergrund zu holen ... wenn du mit einem JDialog arbeitest fehlt das und du hast nur die Möglichkeiten entweder alles zu minimieren oder mit ALT+TAB dranzukommen.
6) Die Variable serialUID brauchst du nur wenn du das Interface java.io.Serializable implementieren willst, also wenn du Objekte serialisieren willst um sie z.B. zu speichern oder über einen ObjectStream zu verschicken. Ansonsten ist diese Variable überflüssig.

Um auf deine Frage und deinen Source zukommen : WO genau hakt es *ohne C übgrigens* ... welche Fehlermeldungen werden geworfen. WANN treten die Fehler auf ?

Das ein Fernstudium schlecht ist will ich nicht sagen ... aber deins ist es auf jeden Fall ... weiter möchte ich mich dazu nicht äußern.
 
Die Imports komplett auszuschreiben ist guter Stil. IDEs können das automatisch verwalten.

Mit einer 'where'-Klausel im sql-Statement kannst du genau den Datensatz aus der Datenbank lesen, dessen Existenz du prüfen möchtest.

Java:
	 public void check(String firstName, String lastName){
		 //...
		 String selectString = " SELECT vorname, nachname FROM personen where vorname=" + firstName + " and nachname=" + lastName;
 
  • Gefällt mir
Reaktionen: sos
@Spikee

Dein Wissen in allen Ehren, aber deine arrogante Art kotzt mich echt an. Ist nicht das erste mal, dass mir das aufstößt und es musste jetzt einfach mal raus. Das ist meiner Meinung nach nicht tutorials.de-würdig.
 
  • Gefällt mir
Reaktionen: sos
Naja aber erlich ... noch schlimmer kann ichs mir langsam nicht mehr antun. Meine Aggressivität ist nur eine Reaktion auf die DUMMHEIT vieler Lehrer und Dozenten die selber mal ein Blick in ein halbwegs vernünftiges Java-Buch wagen sollten um ihre eigenen Fehler mal zu bemerken.
Es ist nicht gerade im Sinne der Erfindung der import-Anweisung wenn man seinen "Schülern" beibringt diese nicht zu nutzen.
Es ist schlechtes Design erst die Logik zu implementiren und sich dann nochmal dran zu setzen um alles halbwegs sauber zu bekommen.
Es ist eine schlechte Angewohnheit sich nicht mit den Eigenheiten des EDT und einer GUI Auszukennen und sich zu denken : das wird schon.

Ich kann es langsam echt nicht mehr sehen ... weil es mich genau so derb ankotzt das es immer noch "Fachleute" gibt die ihr scheinbar schlechtes Wissen noch schlechter weitergeben wie dich meine Art und Weise. Ich rege mich nunmal darüber auf das bei solch banalen Dingen IMMER WIEDER die selben stupiden Fehler gemacht werd obwohl es im Netz 100te wenn nicht 1000te Threads gibt die sich mit diesem Missstand auseinandersetzen.
 
Danke Tim und Franz danke auch das mit dem where klaus.. probier ich jetzt :)

Spikee ich kann dich verstehen.
Teil sind diese veraltete Hefte schuld und der andere Teil liegt an mir selber ...so ist es nun mal...
abgesehen von dem ganzen mi... und um auf die
Eigentlich frage zurückzukommen zu dem Abschnitt
Java:
  if (rs.next()) { 
  //  	
    vorname = rs.getString(1);
	   System.out.println("Person existiert");
    nachname = rs.getString(2); 
    
    System.out.println(vorname);
 
//
	
	}else{...
als Ausgabe bekomme ich
* Treiber laden
* Verbindung aufbauen
* Statement beginnen
* Abfrage beginnen
* Ergebnisse anzeigen
Person existiert

Franz

* Statement beenden
* Datenbank-Verbindung beenden
Franz wird in mein Db entdeckt und ausgegeben, ich muss aber zb Franz oder rainer eingeben und mit klick auf anmelden soll mir mitgeteilt werden ob diese Person in mein Db ist oder nicht..
 
Zuletzt bearbeitet:
Moin,

du könntest dir dazu eine MessageBox anzeigen lassen. Siehe dazu die Klasse JOptionPane. Die Methode showMessageDialog sollte in diesem Fall dene erste Wahl sein.

@Spikee

Um meine Kritik mal etwas zu konkretisieren und vor allem sachlicher darzustellen.. gestern ein wenig aus der Emotion heraus: Im ersten Post gehst du gleich auf 1000e Probleme ein. Soweit in Ordnung, wenn du noch zwei Dinge... ich sag mal 'besser' gemacht hättest:

1) eine freundlichere Formulierung. Mich würde so ein Post ein wenig abschrecken und vor allem...
2) auf das eigentliche Problem eingehen. Ich denke die Fragestellung war ziemlich klar.

Also irgendwie sowas nach dem Schema.. "Du kannst mit einer SELECT-Abfrage wie dieser.... [...] Außerdem gibt's noch einige Probleme in deinem Queltext... 1) [...] 2) [...]".

Best regards
 
Zurück