MySQL Syntax Fehler

Schatti

Mitglied
Hi,

ich habe ein Problem beim Auslesen von Daten!

meine Klasse DB:
Code:
public class Db {
  public Db() {

  }

  public static void main(String[] args) {

  }

  int p = 0;
  public String db(String lese) {
    Frame1 frameneu = new Frame1();

    Connection con = null;
    Statement sta = null;
    ResultSet rs = null;
    try {
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      con = DriverManager.getConnection(
          "jdbc:mysql://sqlserver/db",
          "dbuser", "dbpassword");
      sta = con.createStatement();
      rs = sta.executeQuery(frameneu.eingabe.getText());

      if (p == 0) {
        while (rs.next()) {
          int ArtikelNr = rs.getInt(1);
          String Artikelname = rs.getString(2);
          String ArtikelGruppe = rs.getString(3);
          //frameneu.ausgabe.append(ArtikelNr + " Name: " + Artikelname +
          //                      " Gruppe: " +
          //                        ArtikelGruppe);

          System.out.println(ArtikelNr + " Name: " + Artikelname + " Gruppe: " +
                             ArtikelGruppe);
          p = 1;
        }
      }
    }
    catch (Exception e) {
      System.err.println("Fehler: " + e.getMessage());
    }
    finally {
      try {

        if (rs != null) {
          rs.close();
        }
        if (sta != null) {
          sta.close();
        }
        if (con != null) {
          con.close();
        }
      }
      catch (SQLException e) {}
    }
    return db(lese);
  }

}


Klasse Frame1:
Code:
public class Frame1
    extends JFrame {
//EINIGE ZEILEN CODE
//..............

 Db dbneu = new Db();
  void suchen_actionPerformed(ActionEvent e) {
    String lese = eingabe.getText();

    dbneu.db("lese");
  }

}

D.h. wenn ich jetzt in das Eingabefeld -

Select * from Artikel

eingebe, erscheint unten in der Systemleiste "Fehler: Can not issue empty query."

Wie kann ich den Fehler beheben


MfG
 
Zuletzt bearbeitet:
Was schreibst du denn in das TExtfeld eingabe rein :confused: einen sql-befehl :confused:

Wenn ja, dann ist das falsch:

rs = sta.executeQuery(frameneu.eingabe.getText());

das muss so sein

rs = sta.executeQuery(lese);

und dann halt das was elmato geschrieben hat.
 
Ok danke hat geklappt!

wie kann ich nun den Inhalt auf einem Textfeld ausgeben?

Ich dachte das geht mit

ausgabe.append(Inhalt);


Greetz
 
append ist für eine TextArea, damit kannst du dann immer neue Daten hinzufügen. anders setText, da wird der alte Text gelöscht und der neue text hinzugefügt, aber wie gesagt nur bei einer textarea :)
 
hi ok!

aber irgendwie erscheint in meiner textarea nichts!


Meine Klasse Db:
Code:
public class Db {

  int p = 0;
  public String db(String lese) {
    Frame1 frameneu = new Frame1();

    Connection con = null;
    Statement sta = null;
    ResultSet rs = null;
    try {
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      con = DriverManager.getConnection(
          "jdbc:http://Datenbank",
          "user", "psw");
      sta = con.createStatement();
      rs = sta.executeQuery(lese);

      if (p == 0) {
        while (rs.next()) {
          String Name = rs.getString(2);
          String Vorname = rs.getString(3);
       //Ausgabe in einer TextArea
          frameneu.ausgabe.setText(" Name: " + Name +" Vorname: " + Vorname);

          p = 1;
        }
      }
    }
    catch (Exception e) {
      System.err.println("Fehler: " + e.getMessage());
    }
    finally {
      try {

        if (rs != null) {
          rs.close();
        }
        if (sta != null) {
          sta.close();
        }
        if (con != null) {
          con.close();
        }
      }
      catch (SQLException e) {}
    }
    return db(lese);
  }

}

Mit freundlichen Grüßen
 
Du hast insgesamt 2 Objekte von Frame1. Du musst das so machen:

Code:
public class Db {

  int p = 0;
Frame1 frameneu;
  public String db(String lese,Frame1 frameneu) {
this.frameneu=frameneu;

und

Code:
public class Frame1
    extends JFrame {
//EINIGE ZEILEN CODE
//..............

 Db dbneu = new Db();
  void suchen_actionPerformed(ActionEvent e) {
    String lese = eingabe.getText();

    dbneu.db(lese,this);
  }

}
den rest dann wie bei dir.
 
Hi,

also hab es nun so verändert, aber funktioniert leider noch immer nicht!

PS: ihr könnt euch das gesamte projekt mal downloaden und es anschaun!

Hier gehts lang ...

Bin einfach zu blöd dafür ...

greetz
schatti
 
Da ist was was ich nicht wusste. Du hast eine Extra-Klasse um die Application zu starten.
Du musst das Objekt von Frame1 was du in der Application1-Klasse anlegst an die Frame1-klasse übergeben:
Du machst dir in der Frame1-Klasse am besten eine Methode setFrame
Code:
Frame1 frame;
public Frame1 setFrame(Frame1 frame)
{
   this.frame=frame;
}

das machste dann in der Application1
Code:
frame.setframe(frame);



und das dann wieder in der Frame1

Code:
dbneu.db(lese,frame);


dann müsste es eigentlich funktionieren :)
 
Zurück