SUBMIT-Button funktioniert nicht.

pawlo

Mitglied
Hallo,

habe eine einfache dbox erstellt, wo ein user nach Eintippen seines unamen, upasses seine Daten aus einer db per SUBMIT-Button löschen kann. Dies hat alles funktioniert bis ich heute etwas verändert habe und es nicht mehr läuft... Habe auch aus der "History" den Qtext noch mal implementiert und ohne Erfolg.
Wenn ich aber eine SQL-Anfrage falsch schreibe, kommt eine Fehlermeldung,
also ist die Verbindung da. Würde jetzt auf den Button tippen.

Hat jm eine Idee was los ist?

LG, Pawel

Java:
     class Delete extends JFrame implements ActionListener
{
 JButton SUBMIT2;
 JPanel panel;
 JLabel label1,label2, label3;
 final JTextField  text1,text2;

  Delete()
  {
     
  label1 = new JLabel();
  label1.setText("Username:");
  text1 = new JTextField(15);

  label2 = new JLabel();
  label2.setText("Password:");
  text2 = new JPasswordField(15);
  

  
  SUBMIT2=new JButton("DELETE");
  
  panel=new JPanel(new GridLayout(9,2));
   

  
  panel.add(label1);
  panel.add(text1);
  panel.add(label2);
  panel.add(text2);
  
  
  panel.add(SUBMIT2);
  
 
  this.getContentPane ().add (panel);
 
panel.validate();
panel.repaint();
  
 this.pack();
     setVisible(true);
    
   
  add(panel,BorderLayout.CENTER);
  SUBMIT2.addActionListener(this);
  setTitle("DELETE FORM"); 
  }
  
  
  
 public void actionPerformed(ActionEvent ae)
  {
  String value1=text1.getText();//uname
  String value2=text2.getText();//pass
  
 
  try {
Class.forName("com.mysql.jdbc.Driver");
Connection con= (Connection) DriverManager.getConnection("jdbc:mysql://localhost/first","root","mypawel");
/*As we are creating a connection on a local computer we will write the url as jdbc:mysql://localhost:3306 */


// String sql="Select * from fitn1 where uname = 'koko'";

String sql="Select * from ben ";

Statement stmt=con.createStatement();

ResultSet  rs = stmt.executeQuery(sql);

 
   
   String sql2="delete from ben where uname like '"+value1+"' ";
  

   
//   ResultSet rs = stmt.executeQuery(sql3);
   while(rs.next()){
       String uname=rs.getString("uname");
       String upass=rs.getString("upass");
    // !value2.equals(uname) &&  value2.equals(value3)
       while ( rs.next() )
  
       //falls uname == eingetippter text
 if  ((!value1.equals("") && !value2.equals("")) && value1.equals(uname) && value2.equals(upass))

{      //wird stmt2 delete auseführt
    System.out.printf( " successfully deleted !" );
     Statement stmt2=con.createStatement();
     stmt2.executeUpdate(sql2);
     stmt2.close();
  
    // stmt3.executeQuery(sql3);
   
  
     dispose();

  }
  
  else{
  System.out.println("enter the valid username and password");
  JOptionPane.showMessageDialog(this,"Incorrect login or password",
  "Error",JOptionPane.ERROR_MESSAGE);
  }
   }
}
catch (Exception e){
    System.out.println(value1);
JOptionPane.showMessageDialog(this, e.getMessage());
}
  
  }

}
 
Zuletzt bearbeitet:
Java:
     class Delete extends JFrame implements ActionListener
{
 JButton SUBMIT2;
 JPanel panel;
 JLabel label1,label2, label3;
 final JTextField  text1,text2;

  Delete()
  {
     
  label1 = new JLabel();
  label1.setText("Username:");
  text1 = new JTextField(15);

  label2 = new JLabel();
  label2.setText("Password:");
  text2 = new JPasswordField(15);
  

  
  SUBMIT2=new JButton("DELETE");
  
  panel=new JPanel(new GridLayout(9,2));
   

  
  panel.add(label1);
  panel.add(text1);
  panel.add(label2);
  panel.add(text2);
  
  
  panel.add(SUBMIT2);
  
 
  this.getContentPane ().add (panel);
 
panel.validate();
panel.repaint();
  
 this.pack();
     setVisible(true);
    
   
  add(panel,BorderLayout.CENTER);
  SUBMIT2.addActionListener(this);
  setTitle("DELETE FORM"); 
  }
  
  
  
 public void actionPerformed(ActionEvent ae)
  {
  String value1=text1.getText();//uname
  String value2=text2.getText();//pass
  
 
  try {
Class.forName("com.mysql.jdbc.Driver");
Connection con= (Connection) DriverManager.getConnection("jdbc:mysql://localhost/first","root","mypawel");
/*As we are creating a connection on a local computer we will write the url as jdbc:mysql://localhost:3306 */


// String sql="Select * from fitn1 where uname = 'koko'";

String sql="Select * from ben ";

Statement stmt=con.createStatement();

ResultSet  rs = stmt.executeQuery(sql);

 
   
   String sql2="delete from ben where uname like '"+value1+"' ";
  

   
//   ResultSet rs = stmt.executeQuery(sql3);
   while(rs.next()){
       String uname=rs.getString("uname");
       String upass=rs.getString("upass");
    // !value2.equals(uname) &&  value2.equals(value3)
       while ( rs.next() )
  
       //falls uname == eingetippter text
 if  ((!value1.equals("") && !value2.equals("")) && value1.equals(uname) && value2.equals(upass))

{      //wird stmt2 delete auseführt
    System.out.printf( " successfully deleted !" );
     Statement stmt2=con.createStatement();
     stmt2.executeUpdate(sql2);
     stmt2.close();
  
    // stmt3.executeQuery(sql3);
   
  
     dispose();

  }
  
  else{
  System.out.println("enter the valid username and password");
  JOptionPane.showMessageDialog(this,"Incorrect login or password",
  "Error",JOptionPane.ERROR_MESSAGE);
  }
   }
}
catch (Exception e){
    System.out.println(value1);
JOptionPane.showMessageDialog(this, e.getMessage());
}
  
  }

}
 
Was passiert denn? Gibt es eine Fehlermeldung?
Ich würde den Code nochmal durchgehen und verbessern, da ist einiges etwas chaotisch, durcheinander und falsch, z.B.
[JAVA=78]
// ResultSet rs = stmt.executeQuery(sql3);
while(rs.next()){
String uname=rs.getString("uname");
String upass=rs.getString("upass");
// !value2.equals(uname) && value2.equals(value3)
while ( rs.next() )
[/code]
Da hast du 2mal das
Code:
while(rs.next())
drin...

Und bei deinem Frame solltest du setVisible(true) als allerletztes aufrufen.
Das sind so die Sachen, die mir auf Anhieb erstmal aufgefallen sind.
 
Grundsätzlich ist es bei solchen Problemen zu empfehlen mit dem Debugger zu arbeiten oder einfach mal ein paar Sysouts ein zubauen. Hat mir persönlich schon oft geholfen.
 
Ich würde auf jeden Fall auch mal den Code lesbarer schreiben, also z.B. alles richtig einrücken und strukturieren. Dadurch wird es dann bestimmt auch einfacher, etwaige Probleme zu erkennen.

So etwas
Java:
  label1 = new JLabel();
  label1.setText("Username:");

kannst du auch so schreiben
Java:
  label1 = new JLabel("Username:");

Code:
JButton SUBMIT2;
Nur mit Grossbuchstaben werden Konstantennamen geschrieben. Besser wäre da
Code:
JButton submit2;

Und das brauchst du nicht:
[JAVA=38]
panel.validate();
panel.repaint();
[/code]
 
Zuletzt bearbeitet von einem Moderator:
habe jetzt das
Java:
while(rs.next())
rausgenommen....
es läuft irgenwie wieder. bin aber immer noch etwas skeptisch dass es ein internes Problem von NetBeans ist.
Der Quellcode aus der History der gestern lief ging heute auf einmal nicht mehr.
 
Na ja, mit
Code:
while(rs.next())
gehst du halt durch das ResultSet durch, welches du mit dem Statement über die Connection geholt hast. rs.next() springt dabei immer 1 Datensatz im ResultSet weiter, bis keiner mehr da ist, also bis du am Ende des ResultSet angekommen bist. Und du hattest halt das zweimal dort eingebaut.
Und am Ende solltest du auch die Connection mit close() wieder schliessen.
 
Ein Tipp: Lagere deinen Code der sich um die Datenbank kümmert aus und rufe im ActionListener diese ausgelagerte(n) Funktion(en) auf. Das erhöht die Lesbarkeit ergibt eine bessere Struktur.
 

Neue Themen


Zurück
Oben