Derby/JavaDB Keine Reaktion von "insert into" im ActionListener

E99

Aktives Mitglied
Hallo!

Ich programmiere schon seit einiger Zeit mit Java. Schon lange versuche ich ein kl. Projekt zum Laufen zu bringen (eine kl. Vermögensverwaltung, die Werte in einer Datenbank abspeichert, bearbeitet und ausliest).
Die UI ist soweit fertig, aber mit der Db gibt es Probleme:

Derby Db ist die erste Datenbank, die eine Verbindung ohne Fehler hergestellt hat. :autsch:

Wenn ich jetzt aber Daten eintragen möchte und auf den entsprechenden Ok-Button klicke, passiert nichts...kein Eintrag wird ausgeführt....ABER es gibt auch keine Fehlermeldungen, die auftauchen...

Die Konsole bleibt leer und auch sonst geschieht nichts..

Nach langem Recherchieren weiß ich keinen Rat mehr...:rtfm::bahnhof:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ui;

import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.PlainDocument;
import lib.DbFacade;
public class AktPanel extends JPanel{

boolean neuOkEuro;
boolean neuOkDollar;
boolean ed; 

 Properties qutient = new Properties();
 int euroDollarQuotient;
  JLabel aktie = new JLabel("Anlage:");
  static JTextField titel = new JTextField();
  static JTextField kaufwert = new JTextField();
  static JTextField aktWert = new JTextField();
  static JTextField anzahl = new JTextField();
  static JTextField gesamtWertKauf = new JTextField();
  static JTextField gesamtWertAkt = new JTextField();
  static JTextField gewinn = new JTextField();
  static JTextField kaufDatum = new JTextField();
  static JTextField verkaufDatum = new JTextField();
  JButton euro = new JButton();
  JButton ok = new JButton();
  JButton dollar = new JButton();
  
  GridLayout grid = new GridLayout(13, 1);
  private static int recordCounter; // Aktuellen Dateisatz merken

  static DbFacade dbLayer = new DbFacade();
  
public AktPanel(int recordIndex) {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
      this.recordCounter = recordIndex;
        try {
            this.qutient.load(new FileInputStream("prp/bas/Basic.properties"));
            euroDollarQuotient = Integer.valueOf(qutient.getProperty("EuroDollarQuotient"));
        } catch (IOException ex) {
            Logger.getLogger(AktPanel.class.getName()).log(Level.SEVERE, null, ex);
        } catch(NumberFormatException ne){
            System.out.println("Fehler beim laden der währungsumrechnung!");
        }
                
        
        this.setLayout(grid);
    this.setMinimumSize(new Dimension(400, 250));
    this.setPreferredSize(new Dimension(400, 250));
    firstRecord(); // Ersten Datensatz holen
    
    this.add(aktie);
    this.add(titel);
    this.add(kaufwert);
    this.add(anzahl);
    this.add(kaufDatum);
    this.add(verkaufDatum);
    this.add(aktWert);
    this.add(gesamtWertKauf);
    this.add(gesamtWertAkt);
    this.add(gewinn);
    this.add(euro);
    this.add(dollar);
    this.add(ok);
    
    euro.setEnabled(false);
    ok.setEnabled(false);
    dollar.setEnabled(false);
    
    
    euro.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
         prepareNewEuro();
         ed = true;
      }
    });
    
    
    dollar.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
          prepareNewDollar();
          ed = false; 
        }
      
    });
    ok.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
          if(test() & !ed){
                        try {
          
                            dbLayer.insertRecord(dbLayer.getLastRecord()+1, titel.getText(),
                                    Double.parseDouble(kaufwert.getText()) * euroDollarQuotient,
                                    Double.parseDouble(kaufwert.getText()),
                                    Double.parseDouble(aktWert.getText()) * euroDollarQuotient, 
                                    Double.parseDouble(aktWert.getText()),
                                    Integer.parseInt(anzahl.getText()),
                                    (Double.parseDouble(aktWert.getText())*euroDollarQuotient) * Double.parseDouble(anzahl.getText()),
                                    Double.parseDouble(aktWert.getText()) * Double.parseDouble(anzahl.getText()),
                                    (Double.parseDouble(kaufwert.getText())*euroDollarQuotient)*Double.parseDouble(anzahl.getText()), 
                                    Double.parseDouble(kaufwert.getText()) * Double.parseDouble(anzahl.getText()),
                                    (Double.parseDouble(aktWert.getText()) - Double.parseDouble(kaufwert.getText())) * euroDollarQuotient,
                                    Double.parseDouble(aktWert.getText()) - Double.parseDouble(kaufwert.getText()),
                                    kaufDatum.getText(), verkaufDatum.getText(),ed);
                        } catch (SQLException ex) {
                            Logger.getLogger(AktPanel.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (NumberFormatException ne){
                          JOptionPane.showMessageDialog(null, 
                           "Bitte in entsprechende Felder nur Ziffern eingeben!", 
                           "FEHLER", JOptionPane.ERROR_MESSAGE); 
                        }
          System.out.println(dbLayer.getTitle(dbLayer.getLastRecord()));
          if(dbLayer.getTitle(dbLayer.getLastRecord()) == titel.getText()){
              recordCounter=dbLayer.getLastRecord();
              updateWidgets();
          }else{
              JOptionPane.showMessageDialog(null, 
              "Eintragung konnte nicht erfolgen!",
              "FEHLER", JOptionPane.ERROR_MESSAGE); 
          }
          }
        }
      
    });
 }
    
    protected static void updateWidgets() {
        
        
    titel.setText("Titel:    " +dbLayer.getTitle(recordCounter));
    kaufwert.setText("Kaufwert:   (€) " +dbLayer.getKaufWert(recordCounter) + "  , ($) ");
    aktWert.setText("Aktueller Wert:   (€) " +dbLayer.getAktWert(recordCounter)+ "  , ($) ");
    anzahl.setText("Anzahl gekaufter Anlagen:   "+dbLayer.getAnzahl(recordCounter));
    gesamtWertKauf.setText("Insgesamt ausgegebener Betrag:   (€) "+dbLayer.getGesamtWertKauf(recordCounter)+ "  , ($) ");
    gesamtWertAkt.setText("Insgesamter aktueller Wert:   (€) "+dbLayer.getGesamtWertAkt(recordCounter)+ "  , ($) ");
    gewinn.setText("Aktueller Gewinn/Verlust:   (€) "+dbLayer.getGewinn(recordCounter)+ "  , ($) ");
    kaufDatum.setText("Kaufdatum:   "+dbLayer.getKaufDatum(recordCounter));
    verkaufDatum.setText("Verkaufsdatum:   "+dbLayer.getVerkaufDatum(recordCounter));
  }

  protected void firstRecord() {
    recordCounter = 0;
    updateWidgets();
    titel.setEditable(false);
    kaufwert.setEditable(false);
    aktWert.setEditable(false);
    anzahl.setEditable(false);
    gesamtWertKauf.setEditable(false);
    gesamtWertAkt.setEditable(false);
    gewinn.setEditable(false);
    kaufDatum.setEditable(false);
    verkaufDatum.setEditable(false);
  }

  protected void newAkt(){
    
    euro.setText("Euro"); 
    euro.setEnabled(true);
    dollar.setText("Dollar");   
    dollar.setEnabled(true);
    titel.setEditable(false);
    kaufwert.setEditable(false);
    aktWert.setEditable(false);
    anzahl.setEditable(false);
    gesamtWertKauf.setEditable(false);
    gesamtWertAkt.setEditable(false);
    gewinn.setEditable(false);
    kaufDatum.setEditable(false);
    verkaufDatum.setEditable(false);
    verkaufDatum.setText("Eingaben in");
    titel.setText(null);
    kaufwert.setText(null);
    aktWert.setText(null);
    anzahl.setText(null);
    gesamtWertKauf.setText(null);
    gesamtWertAkt.setText(null);
    gewinn.setText(null);
    kaufDatum.setText(null);
}
  
  protected void previousRecord() {
    if (recordCounter > 0) {
      recordCounter--;
      updateWidgets();
    }
  }

  protected void nextRecord() {
    if (recordCounter < (dbLayer.getLastRecord())) {
      recordCounter++;
      updateWidgets();
    }
  }

  protected void lastRecord() {
    recordCounter = dbLayer.getLastRecord();
    updateWidgets();
  }

protected void prepareNewEuro(){
    euro.setText("");
    euro.setEnabled(false);
    ok.setText("Ok");
    ok.setEnabled(true);
    dollar.setEnabled(false);
    dollar.setText("");
    titel.setEditable(true);
    kaufwert.setEditable(true);
    aktWert.setEditable(true);
    anzahl.setEditable(true);
    gesamtWertKauf.setEditable(false);
    gesamtWertAkt.setEditable(false);
    gewinn.setEditable(false);
    kaufDatum.setEditable(true);
    verkaufDatum.setEditable(false);
     titel.setText("Titel");
    kaufwert.setText("Kaufwert in €");
    aktWert.setText("Aktueller Wert in €");
    anzahl.setText("Anzahl");
    gesamtWertKauf.setText("---");
    gesamtWertKauf.setEditable(false);
    gesamtWertAkt.setText("---");
    gesamtWertAkt.setEditable(false);
    gewinn.setText("---");
    gewinn.setEditable(false);
    kaufDatum.setText("Kaufdatum");
    verkaufDatum.setText("---");
    verkaufDatum.setEditable(false);
}
protected void prepareNewDollar(){
    
    ok.setText("Ok");
    ok.setEnabled(true);
    euro.setText("");
    euro.setEnabled(false);
    dollar.setEnabled(false);
    dollar.setText("");
    titel.setEditable(true);
    kaufwert.setEditable(true);
    aktWert.setEditable(true);
    anzahl.setEditable(true);
    gesamtWertKauf.setEditable(false);
    gesamtWertAkt.setEditable(false);
    gewinn.setEditable(false);
    kaufDatum.setEditable(true);
    verkaufDatum.setEditable(false);
     titel.setText("Titel");
    kaufwert.setText("Kaufwert in $");
    aktWert.setText("Aktueller Wert in $");
    anzahl.setText("Anzahl");
    gesamtWertKauf.setText("---");
    gesamtWertKauf.setEditable(false);
    gesamtWertAkt.setText("---");
    gesamtWertAkt.setEditable(false);
    gewinn.setText("---");
    gewinn.setEditable(false);
    kaufDatum.setText("Kaufdatum");
    verkaufDatum.setText("---");
    verkaufDatum.setEditable(false);
    
}

protected int getRecordCounter() {
    return recordCounter;
    }

    void save() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    void edit() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    void delete() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

private boolean test(){
    
    boolean ok = true;
    
   
    if(aktWert.getText().isEmpty() || aktWert.getText().equals("Aktueller Wert in €") || 
       aktWert.getText().equals("Aktueller Wert in $") ){
        
      aktWert.setText(kaufwert.getText());
    }
  
    if(titel.getText().isEmpty() | kaufwert.getText().isEmpty() | anzahl.getText().isEmpty()){
           JOptionPane.showMessageDialog(null, "Bitte alle nötigen Daten angeben!", "FEHLER", JOptionPane.ERROR_MESSAGE); 
           ok = false;
    }else{
       ok = false;
    } 
    
    try{
    double kauf = Double.parseDouble(kaufwert.getText());
    double akt = Double.valueOf(aktWert.getText());
    double anz = Double.valueOf(anzahl.getText());
    if(kauf <0 | akt <0 | anz <0){
        JOptionPane.showMessageDialog(null, "Bitte keine negativen Zahlen eingeben!", "FEHLER", JOptionPane.ERROR_MESSAGE); 
           ok = false;
    }
   }catch(java.lang.NumberFormatException nfe){
       JOptionPane.showMessageDialog(null, "Bitte in entsprechende Felder nur Ziffern eingeben!", "FEHLER", JOptionPane.ERROR_MESSAGE); 
   } 
   
   
   return ok;
}

 // Diese Methode liefert einen Boolean zurück, ob ein String ausschließlich
// Zahlen enthält (true) oder auch andere Zeichen (false).    
protected boolean checkLetters(String s) {   
    for(int i = 0; i < s.length(); i++) {
        if(!Character.isDigit(s.charAt(i))) {  
        return false;            
        }
    }
        return true;
    
}
}

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lib;

import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.Properties;

/**
 *
 * @author Emanuel_2
 */
public class DbFacade {

  private static HadesDb1 database;
  private Properties dbProperties = new Properties();
  private int lastRecord;

  public DbFacade() {
      
    database = null;
    try {
      database = new HadesDb1();
      lastRecord = database.getLastRow();
    }
    catch (Exception ex) {
      ex.printStackTrace(); // ...................... Datenbank nicht zu starten
      return; // ................................ Im Fehler => Ende des Treibers
    }
    
  }

  protected void finalize() throws SQLException {
   this.close(); // ......................... Datenbank herunterfahren
  }
 
  public String getResults() {
    return "Nicht implementiert";
  }

  public String getTitle(int index) {
    String titel = null;
    try {
      titel = database.getData(index,"TITEL");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return titel;
  }

  public String getKaufWert(int index) {
    String kaufwert = null;
    try {
      kaufwert = database.getData(index,"KAUFWERT");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return kaufwert;
  }
  public String getKaufWertDollar(int index) {
    String kaufwertdollar = null;
    try {
      kaufwertdollar = database.getData(index,"KAUFWERTDOLLAR");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return kaufwertdollar;
  }

  public String getAktWert(int index) {
    String aktwert = null;
    try {
     aktwert = database.getData(index,"AKTWERT");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return aktwert;
  }
public String getAktWertDollar(int index) {
    String aktwertdollar = null;
    try {
     aktwertdollar = database.getData(index, "AKTWERTDOLLAR");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return aktwertdollar;
  }
  public String getKaufDatum(int index) {
    String kaufdatum = null;
    try {
      kaufdatum = database.getData(index,"KAUFDATUM");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return kaufdatum;
  }

  public String getAnzahl(int index) {
   String anzahl = null;
    try {
      anzahl = database.getData(index,"ANZAHL");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return anzahl;
  }
  
  public String getGesamtWertAkt(int index) {
    String gesamtwertakt = null;
    try {
      gesamtwertakt = database.getData(index, "GESAMTAKT");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return gesamtwertakt;
  }
  public String getGesamtWertAktDollar(int index) {
    String gesamtwertakt = null;
    try {
      gesamtwertakt = database.getData(index, "GESAMTAKTDOLLAR");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return gesamtwertakt;
  }
  public String getGesamtWertKauf(int index) {
    String gesamtwert = null;
    try {
      gesamtwert = database.getData(index, "GESAMTKAUF");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return gesamtwert;
  }
  public String getGesamtWertKaufDollar(int index) {
    String gesamtwert = null;
    try {
      gesamtwert = database.getData(index, "GESAMTKAUFDOLLAR");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return gesamtwert;
  }
  
  public String getGewinn(int index) {
    String gewinn = null;
    try {
      gewinn = database.getData(index, "GEWINN");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return gewinn;
  }
  public String getVerkaufDatum(int index) {
    String verkaufsdatum = null;
    try {
      verkaufsdatum = database.getData(index, "VERKAUFSDATUM");
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return verkaufsdatum;
  }

  public int getLastRecord() {
    return lastRecord;
  }
  
  public void deleteRecord(int index) throws SQLException{
    database.deleteRow(index);
    database.renumber(index);
    lastRecord--;
  }

  public void insertRecord(int id,String titel, double kaufWert, double kaufWertDollar, 
          double AktWert, double AktWertDollar, int Anzahl,double GesamtWertAkt, 
          double GesamtWertAktDollar, double GesamtWertKauf, double GesamtWertKaufDollar, 
          double gewinn,double gewinnDoll, String KaufDatum, String VerkaufDatum, boolean ed)
  throws SQLException {
    database.insertRow(id,titel, kaufWert, kaufWertDollar, AktWert,AktWertDollar, 
            Anzahl,GesamtWertAkt, GesamtWertAktDollar, GesamtWertKauf,GesamtWertKaufDollar,
            gewinn,gewinnDoll,KaufDatum,VerkaufDatum,ed);
  }
  
  public static void close() throws SQLException{
      database.close();
  }
}

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lib;
import java.sql.*;


public class HadesDb1 {
    
// Variablen...
    
    static Connection con;
    static Statement stmt;
    static Statement stmt1;
    static DatabaseMetaData dmd;
    
// Stellt Db Verbindung her...
    
    public static void open() throws Exception{
        
    //  Treiber laden u. Con erzeugen
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    con = DriverManager.getConnection("jdbc:derby:anlagenDB;create=true");
        
    stmt = con.createStatement();
    stmt1 = con.createStatement();
    
    dmd = con.getMetaData();
    ResultSet rs = dmd.getTables(null,"APP", "ANLAGEN",null);
    if (!rs.next()) {
    
    String strCreateMyTable = 
    "CREATE table ANLAGEN ("+
    "ID          INTEGER,"+ 
    "TITEL       VARCHAR(250),"+ 
    "KAUFWERT    DOUBLE,"+
    "KAUFWERTDOLLAR DOUBLE,"+
    "AKTWERT     DOUBLE,"+
    "AKTWERTDOLLAR DOUBLE,"+
    "ANZAHL      INTEGER,"+
    "GESAMTAKT   DOUBLE,"+
    "GESAMTAKTDOLLAR DOUBLE,"+
    "GESAMTKAUF  DOUBLE,"+
    "GESAMTKAUFDOLLAR DOUBLE,"+
    "GEWINN      DOUBLE,"
  + "GEWINNDOLLAR DOUBLE,"
  + "KAUFDATUM   VARCHAR(250),"
  + "VERKAUFSDATUM VARCHAR(250),"
  + "ED CHAR(1)"
  + " )"  ;
    stmt.executeUpdate(strCreateMyTable);  
    stmt.executeUpdate("INSERT INTO Anlagen VALUES(1,test,1,1,1,1,1,1,1,1,1,1,1,1,1,1)");  
    }
    }
    
//Schließt Db Verbindung...
    
    public static void close() throws SQLException{
    
    //Objekte schließen...
    stmt.close();
    stmt1.close();
    con.close();
    }
    
    
// Gibt Inhalte aus...
    
    public static String getData(int index, String command) throws SQLException{
    try{   
    open();
    //Statement statement = null;
    ResultSet rs = null;
    Object record = null;
    int colMax;
    String id = new Integer(index).toString(); // Korrekt
    
    stmt = con.createStatement(); // statement objects can be reused with
    rs = stmt.executeQuery("SELECT * FROM Anlagen WHERE id = " + id); // run the query
    
    if(rs.next()){
    record = rs.getObject(command);
    rs.close();
    return record.toString();
    }
    else{
    String error = new String("Fehler beim Laden der Daten!");
    return error;
    }
    }catch(java.lang.NullPointerException jlne){
      String error = new String("Fehler beim Laden der Daten!");
      return error;  
    }catch(java.lang.Exception e){
      String error = new String("Fehler beim Laden der Daten!");
      return error;
    }finally{
        close();
    }
    }
 
    
/**
   * Ermittelt die Anzahl der Datenbankzeilen
   * @return Anzahl der Zeilen
*/
    public int getLastRow() throws SQLException{
    try{
    open();
    int numberOfRows = 0;
    
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                               ResultSet.CONCUR_READ_ONLY);

    ResultSet rs = stmt.executeQuery("SELECT id FROM Anlagen");
    rs.last();
    numberOfRows = rs.getRow();
    rs.beforeFirst();
    rs.close();
    return numberOfRows;
    }catch(java.lang.NullPointerException ne){
      System.out.println("FEHLER beim zeilenzähler!");
      return 0;
    }catch(java.lang.Exception e){
      System.out.println("FEHLER beim zeilenzähler!");
      return 0;
    }finally{
        close();
    }
  }
    
    
// Löscht Datensatz...
    public void deleteRow(int index) throws SQLException {
    try{
    open();
    String id = new Integer(index).toString();
    stmt = con.createStatement();
    int i = stmt.executeUpdate("DELETE FROM Anlagen WHERE id = " + id);
    if (i == -1) {
      System.out.println("HadesDb [deleteRow]: Fehler beim Loeschen"); // Debug
   }}catch(java.lang.Exception e){
      System.out.println("FEHLER beim löschen!");
    }finally{
        close();
    }
  }
    
    
//Nummeriert Datensätze neu...
    public void renumber(int startIndex) throws SQLException {
   try{
    open();
    stmt = con.createStatement();
    int lastRow = getLastRow();
    for (int i = startIndex; i <= lastRow; i++) {
      stmt.executeUpdate("UPDATE Anlagen SET id = " + (i) +
                              " WHERE id = " + (i + 1));
      System.out.println(startIndex); // Debug
      startIndex++;
    }}catch(java.lang.Exception e){
      System.out.println("FEHLER beim löschen!");
    }finally{
        close();
    }
  }
    
// Erstellt neuen Datensatz...
    
    public void insertRow(int id,String titel, double kaufWert, double kaufWertDollar, 
            double AktWert, double AktWertDollar, int Anzahl, double GesamtWertAkt, 
            double GesamtWertAktDollar, double GesamtWertKauf, double GesamtWertKaufDollar, 
            double gewinn,double gewinnDoll, String KaufDatum, String VerkaufDatum,boolean ed)
    throws SQLException {
        
   try{
        open();
      char ed2;
      if(ed){
          ed2 = '1';
      }else{
          ed2 = '0';
      }
    stmt.executeUpdate(
        "INSERT INTO Anlagen" +
        " VALUES('"+ id + "','"+titel+"','" + kaufWert + "','"+ kaufWertDollar + "','"+ AktWert+"','"+AktWertDollar+"','"+
            Anzahl+ "','" + GesamtWertAkt + "','" + GesamtWertAktDollar + "','" + GesamtWertKauf + "','" +
        GesamtWertKaufDollar + "','" + gewinn + "','" + gewinnDoll + "','"+ KaufDatum + "','" + VerkaufDatum + "','" + ed2 +"')");
  }catch(java.lang.Exception e){
      System.out.println("FEHLER beim löschen!");
    }finally{
        close();
    }
    }
    
    public static void dropDb() throws SQLException, Exception{
        open();
        stmt.executeUpdate("DROP TABLE Anlagen");
        close();
    }
}

PS: ich hoffe, ihr versteht etwas vom Quelltext...:-/// (und jmd. kann mir helfen...)
 

VfL_Freak

Top Contributor
Moin,

habe jetzt zwar nur relativ lax durch die vielen Zeilen gescrollt ...

Wo finde ich denn "den entsprechenden Ok-Button" resp. den zugehörigen ActionListener ???:L

Gruß
Klaus
 
S

SlaterB

Gast
Zeile 106 im ersten,

in dem Listener gibts ja extra ein if, welches gegebenenfalls genau dafür sorgt, dass rein gar nichts passiert, auch keine Ausgabe,
schreibe doch vorher eine Ausgabe, um zu sehen ob der Listener drankommt, gib den boolean ed aus,

schreibe im else zum großen if eine Ausgabe oder eine JOptionPane, um zu informieren dass nun wirklich nichts gemacht wird
 

E99

Aktives Mitglied
Danke für die schnellen Antworten!!!

@Vfl_freak

der okbutton ist JButton ok im ersten

@SlaterB

hab ich ausprobiert:

Java:
System.out.println(ed);
          if(test() & !ed){
                        try {
          
                            dbLayer.insertRecord(dbLayer.getLastRecord()+1, titel.getText(),
                                    Double.parseDouble(kaufwert.getText()) * euroDollarQuotient,
                                    Double.parseDouble(kaufwert.getText()),
                                    Double.parseDouble(aktWert.getText()) * euroDollarQuotient, 
                                    Double.parseDouble(aktWert.getText()),
                                    Integer.parseInt(anzahl.getText()),
                                    (Double.parseDouble(aktWert.getText())*euroDollarQuotient) * Double.parseDouble(anzahl.getText()),
                                    Double.parseDouble(aktWert.getText()) * Double.parseDouble(anzahl.getText()),
                                    (Double.parseDouble(kaufwert.getText())*euroDollarQuotient)*Double.parseDouble(anzahl.getText()), 
                                    Double.parseDouble(kaufwert.getText()) * Double.parseDouble(anzahl.getText()),
                                    (Double.parseDouble(aktWert.getText()) - Double.parseDouble(kaufwert.getText())) * euroDollarQuotient,
                                    Double.parseDouble(aktWert.getText()) - Double.parseDouble(kaufwert.getText()),
                                    kaufDatum.getText(), verkaufDatum.getText(),ed);
                        } catch (SQLException ex) {
                            Logger.getLogger(AktPanel.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (NumberFormatException ne){
                          JOptionPane.showMessageDialog(null, 
                           "Bitte in entsprechende Felder nur Ziffern eingeben!", 
                           "FEHLER", JOptionPane.ERROR_MESSAGE); 
                        }
          System.out.println(dbLayer.getTitle(dbLayer.getLastRecord()));
          if(dbLayer.getTitle(dbLayer.getLastRecord()) == titel.getText()){
              recordCounter=dbLayer.getLastRecord();
              updateWidgets();
          }else{
              JOptionPane.showMessageDialog(null, 
              "Eintragung konnte nicht erfolgen!",
              "FEHLER", JOptionPane.ERROR_MESSAGE); 
          }
          }else{
              System.out.println("Nothing");
          }

bevor die eintragung passieren soll, muss man zwischen euro oder dollar wählen...
ich habe es mit beiden Buttons getestet. Wenn ed true ist kommt jetzt korrekterweise die konsolenausgabe "nothing".
aber wenn ed false ist, passiert dasselbe...
 
S

SlaterB

Gast
weil test() immer false zurückgibt?
Java:
        if (titel.getText().length() == 0 | kaufwert.getText().length() == 0 | anzahl.getText().length() == 0)
        {
            JOptionPane.showMessageDialog(null, "Bitte alle nötigen Daten angeben!", "FEHLER", JOptionPane.ERROR_MESSAGE);
            ok = false; // false
        }
        else
        {
            ok = false; // oder eben false
        }
einfach immer den Code anschauen, bzw. prüfen wie sich die ok-Variable dort entwickelt

Java:
if(dbLayer.getTitle(dbLayer.getLastRecord()) == titel.getText()){
Strings mit equals vergleichen!

und schreibe || + && statt | + & in den ifs
 

VfL_Freak

Top Contributor
Moin,

ich habe es mit beiden Buttons getestet. Wenn ed true ist kommt jetzt korrekterweise die konsolenausgabe "nothing".
aber wenn ed false ist, passiert dasselbe...
Mal ganz dumm gefragt ... bist Du sicher, dass Du da ein "bitweises UND" ('&') machen willst?

Auch in der Methode "test()" irritieren mich diese beiden Zeilen:
Java:
if(titel.getText().isEmpty() | kaufwert.getText().isEmpty() | anzahl.getText().isEmpty()) ...

if(kauf <0 | akt <0 | anz <0)...
Ist in beiden Fällen 'nur' ein "bitweises ODER" ('|') obwohl ein logischer ODER ('||') wohl sinnvoller werden, oder ?

Gruß
Klaus

[EDIT]Mist, schon wieder zu langsam ...[/EDIT]
 

E99

Aktives Mitglied
danke euch beiden schonmal...

jetzt passiert wenigsten etwas...;)

das mit den bitweise-operatoren dachte ich hätte ich verstanden... muss ich aber wohl falsch gedacht haben, wenn das hier unpassend ist...

jetzt kommt noch der fehler:

java.sql.SQLSyntaxErrorException: Die VALUES-Klausel muss mindestens ein Element enthalten. Leere Elemente sind nicht zulässig.

Java:
stmt.executeUpdate(
        "INSERT INTO Anlagen(ID,TITEL,KAUFWERT,KAUFWERTDOLLAR,AKTWERT,AKTWERTDOLLAR,ANZAHL,GESAMTAKT,GESAMTAKTDOLLAR,"
            + "GESAMTKAUF,GESAMTKAUFDOLLAR,GEWINN,GEWINNDOLLAR,KAUFDATUM,VERKAUFSDATUM,ED)" +
        " VALUES("+ id + ","+titel+"," + kaufWert + ","+ kaufWertDollar + ","+ AktWert+","+AktWertDollar+","+
            Anzahl+ "," + GesamtWertAkt + "," + GesamtWertAktDollar + "," + GesamtWertKauf + "," +
        GesamtWertKaufDollar + "," + gewinn + "," + gewinnDoll + ","+ KaufDatum + "," + VerkaufDatum + ",'" + ed2 +"')");
  }catch(java.lang.Exception e){
      System.out.println(e);
    }finally{
        close();
    }

ich hab k.a. warum... ist hier der methodenkopf leer?? ich meine werden keine daten übergeben o. warum??? weil das ist ja eigentlich nicht der fall...
 
S

SlaterB

Gast
übe als erstes mit einer Dummy-Tabelle mit genau EINEM Attribut,
übe auch zunächst ohne zusammengebaute Kommandos, sondern tippe nur fertiges SQL mit dummy-Werten direkt als String in den Quellcode ein,
am besten auch GUI und Listener weglassen..

wenn du die Grundlagen, wie unterschiedliche Angabe von Zahlen + Text + Datum (!), korrekte Kommatrennung, Angabe korrekter Spalten, richtige Anzahl Values usw. alles gemeistert hast,
dann kannst du einen aus Variablen zusammengebauen SQL-String ausgeben und mit dem komplett eingetippen SQL-String bei gleichen Werten vergleichen und jedes vergessene Anführungszeichen, Komma usw. spielend leicht erkennen

das was du da in Zeile 2 bis 6 zusammen-plust, ist einfach ein String am Ende,
einen String kann man in einer Variablen speichern und ausgeben, bevor er an JDBC gereicht wird


Programmieren mag schwer sein, Fehler finden ist es nicht unbedingt, alles nur eine Frage von Fleiß ;)

------

PreparedStatement bietet sich an, z.B. für komplizierte Datum-Übergabe
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,
das mit den bitweise-operatoren dachte ich hätte ich verstanden... muss ich aber wohl falsch gedacht haben, wenn das hier unpassend ist...
Du musst zwischen dem bitweisen UND/ODER ('&'/'|') und dem logischen UND/ODER ('&&'/'||') unterscheiden. Im bitweisen Fall sind es Operatoren (bspw. dies: Bitweiser Operator ? Wikipedia), da hier die beiden Operanden Bit für Bit verglichen werden, während im logischen Fall um logische Aussagen geht (bspw. dies: Logisches Oder ? Wikipedia) - Stichwort hier auch: Wahrheitstabellen.

Hoffe, es hilft ein wenig weiter :)

Gruß
Klaus
 

E99

Aktives Mitglied
Hallo!

Tut mir leid,aber ich melde mich doch noch mal zu meinem alten Thread. Ich habe jetzt in einer extra Datei ein Test durchgeführt (wie von Slater B geraten):

Java:
import java.sql.*;
import lib.HadesDb1;
public class testdb {
    
  public static void main(String[] args) throws SQLException, Exception {
    
      
      HadesDb1.execute("INSERT INTO Anlagen(TITEL) VALUES ('hallo')");
      
      String output = HadesDb1.getData(1, "TITEL");
      System.out.println(output);
     
      
  }
}

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lib;
import java.sql.*;


public class HadesDb1 {
    
// Variablen...
    
    static Connection con;
    static Statement stmt;
    static Statement stmt1;
    static DatabaseMetaData dmd;
    
// Stellt Db Verbindung her...
    
    public static void open() throws Exception{
        
    //  Treiber laden u. Con erzeugen
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    con = DriverManager.getConnection("jdbc:derby:anlagenDB;create=true");
        
    stmt = con.createStatement();
    stmt1 = con.createStatement();
    
    dmd = con.getMetaData();
    ResultSet rs = dmd.getTables(null,"APP", "ANLAGEN",null);
    if (!rs.next()) {
    
    String strCreateMyTable = 
    "CREATE table ANLAGEN ("+
    "ID          INTEGER,"+ 
    "TITEL       VARCHAR(250),"+ 
    "KAUFWERT    DOUBLE,"+
    "KAUFWERTDOLLAR DOUBLE,"+
    "AKTWERT     DOUBLE,"+
    "AKTWERTDOLLAR DOUBLE,"+
    "ANZAHL      INTEGER,"+
    "GESAMTAKT   DOUBLE,"+
    "GESAMTAKTDOLLAR DOUBLE,"+
    "GESAMTKAUF  DOUBLE,"+
    "GESAMTKAUFDOLLAR DOUBLE,"+
    "GEWINN      DOUBLE,"
  + "GEWINNDOLLAR DOUBLE,"
  + "KAUFDATUM   VARCHAR(250),"
  + "VERKAUFSDATUM VARCHAR(250),"
  + "ED CHAR(1)"
  + " )"  ;
    stmt.executeUpdate(strCreateMyTable);  
    stmt.executeUpdate("INSERT INTO Anlagen VALUES(1,test,1,1,1,1,1,1,1,1,1,1,1,1,1,1)");  
    }
    }
    
//Schließt Db Verbindung...
    
    public static void close() throws SQLException{
    
    //Objekte schließen...
    stmt.close();
    stmt1.close();
    con.close();
    }
    
    
// Gibt Inhalte aus...
    
    public static String getData(int index, String command) throws SQLException, Exception{
    try{
    open();
    //Statement statement = null;
    ResultSet rs = null;
    Object record = null;
    int colMax;
    String id = new Integer(index).toString(); // Korrekt
    
    stmt = con.createStatement(); // statement objects can be reused with
    rs = stmt.executeQuery("SELECT * FROM Anlagen WHERE id = " + id); // run the query
    if(rs.next()){
    record = rs.getObject(command);
    rs.close();
    return record.toString();
    }
    else{
    String error = new String("Fehler beim Laden der Daten!");
    return error;
    }
    }catch(java.lang.NullPointerException jlne){
      String error = new String("Fehler beim Laden der Daten!(NullPointer)");
      return error;  
    
    }finally{
        close();
    }
    }
 
    
/**
   * Ermittelt die Anzahl der Datenbankzeilen
   * @return Anzahl der Zeilen
*/
    public int getLastRow() throws SQLException{
    try{
    open();
    int numberOfRows = 0;
    
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                               ResultSet.CONCUR_READ_ONLY);

    ResultSet rs = stmt.executeQuery("SELECT id FROM Anlagen");
    rs.last();
    numberOfRows = rs.getRow();
    rs.beforeFirst();
    rs.close();
    return numberOfRows;
    }catch(java.lang.NullPointerException ne){
      System.out.println("FEHLER beim zeilenzähler!");
      return 0;
    }catch(java.lang.Exception e){
      System.out.println("FEHLER beim zeilenzähler!");
      return 0;
    }finally{
        close();
    }
  }
    
    
// Löscht Datensatz...
    public void deleteRow(int index) throws SQLException {
    try{
    open();
    String id = new Integer(index).toString();
    stmt = con.createStatement();
    int i = stmt.executeUpdate("DELETE FROM Anlagen WHERE id = " + id);
    if (i == -1) {
      System.out.println("HadesDb [deleteRow]: Fehler beim Loeschen"); // Debug
   }}catch(java.lang.Exception e){
      System.out.println("FEHLER beim löschen!");
    }finally{
        close();
    }
  }
    
    
//Nummeriert Datensätze neu...
    public void renumber(int startIndex) throws SQLException {
   try{
    open();
    stmt = con.createStatement();
    int lastRow = getLastRow();
    for (int i = startIndex; i <= lastRow; i++) {
      stmt.executeUpdate("UPDATE Anlagen SET id = " + (i) +
                              " WHERE id = " + (i + 1));
      System.out.println(startIndex); // Debug
      startIndex++;
    }}catch(java.lang.Exception e){
      System.out.println("FEHLER beim Neunummerieren!");
    }finally{
        close();
    }
  }
    
   public static void execute(String task) throws Exception{
       open();
       stmt.executeUpdate(task);
       close();
   }
    
// Erstellt neuen Datensatz...
    
    public void insertRow(int id,String titel, double kaufWert, double kaufWertDollar, 
            double AktWert, double AktWertDollar, int Anzahl, double GesamtWertAkt, 
            double GesamtWertAktDollar, double GesamtWertKauf, double GesamtWertKaufDollar, 
            double gewinn,double gewinnDoll, String KaufDatum, String VerkaufDatum,boolean ed)
    throws SQLException {
      char ed2;
      if(ed){
          ed2 = '1';
      }else{
          ed2 = '0';
      }
        
        
     String insert = "INSERT INTO Anlagen(ID,TITEL,KAUFWERT,KAUFWERTDOLLAR,AKTWERT,AKTWERTDOLLAR,ANZAHL,GESAMTAKT,GESAMTAKTDOLLAR,"
            + "GESAMTKAUF,GESAMTKAUFDOLLAR,GEWINN,GEWINNDOLLAR,KAUFDATUM,VERKAUFSDATUM,ED)" +
        " VALUES("+ id + ","+titel+"," + kaufWert + ","+ kaufWertDollar + ","+ AktWert+","+AktWertDollar+","+
            Anzahl+ "," + GesamtWertAkt + "," + GesamtWertAktDollar + "," + GesamtWertKauf + "," +
        GesamtWertKaufDollar + "," + gewinn + "," + gewinnDoll + ","+ KaufDatum + "," + VerkaufDatum + ",'" + ed2 +"')";   
   try{
        open();
      
    
    stmt.executeUpdate(insert);
  }catch(java.lang.Exception e){
      System.out.println(e);
      System.out.print(insert);
    }finally{
        close();
    }
    }
    
    public static void dropDb() throws SQLException, Exception{
        open();
        stmt.executeUpdate("DROP TABLE Anlagen");
        close();
    }
}

Allerdings kommt jetzt die Ausgabe "Fehler beim Laden der Daten (aus HadesDb1.getData()).
Das müsste ja bedeuten, dass keine Daten in der Tabelle vorhanden sind, weil genau der Code einem Ungültigen-Cörserstatus-fehler vorbeugen soll.

Das blöde ist, dass er ja beim insert into nicht meckert...:bahnhof:

also müsste der eintrag erfolgen... Häää???

Ich bitte nochmal um Hilfe...

Gruß
E99
 
S

SlaterB

Gast
schreibe nie new String(), du schreibst ja auch [c] String insert = "INSERT INTO Anlagen [..] [/c] und nicht
[c] String insert = new String("INSERT INTO Anlagen [..] [/c]..

Cörser ist zwar erstaunlich originell, aber auch nicht zu empfehlen

----

für
[c]"SELECT * FROM Anlagen WHERE id = " + id[/c]
ginge eine int-Variable, der Parameter direkt, übrigens auch,
man stelle sich vor du wolltest bei insertRow() für alle int und double-Parameter erst aufwendig
> String id = new Integer(index).toString();
schreiben..

PreparedStatement mit setInt() usw. löst das Dilemma endgültig

-----

bisher ist dein Fehler lediglich die Bestätigung dass (falls alles korrekt ist) kein Eintrag mit Id = 1 vorhanden ist,
warum bist du dir so sicher dass nicht eine andere Id denkbar ist?
frag doch die ganze Tabelle ohne WHERE ab, wieviele Einträge gibt es dann?

wie steht es eigentlich um
Java:
stmt.executeUpdate("INSERT INTO Anlagen VALUES(1,test,1,1,1,1,1,1,1,1,1,1,1,1,1,1)");
in der open()-Methode, wird das ausgeführt? das test ohne Anführungszeichen sieht ja verdächtig aus,

bist du dir sicher dass du in deinem Programm auch von allen Exceptions erfährst?
ruhig testweise mal
Java:
if (true) throw new Exception("Fehler");
an manchen Stellen einsetzen
 
Zuletzt bearbeitet von einem Moderator:

E99

Aktives Mitglied
Danke für die Hilfe!

Zu dem new String: Keine Ahnung warum ich das geschrieben habe... (keine Absicht...)

Zu Cörser: Ich schreibe häufig schnell und dann schreib man ziemlich von der Seele weg. Wenn ich also mal nicht richtig aufpasse, gerät mal ein Wort falsch. Also lange Rede, kurzer Sinn:

Ich weiß, dass man dieses Wort nicht so schreibt. Gerade Programmierer sollten die englische Sprache beherrschen, was ich auch tue. Also hab bitte keine Angst vor dem Verdummen der Menschheit oder o...:toll:


Das Problem war wirklich das, welches du gepostet hast... also dafür ein großes Dankeschön!!!

Das Testprogramm läuft jetzt. Insert Row () funktioniert auch, aber dafür gibts was anderes...

Ich arbeite mit Netbeans und auf einmal kommt jetzt fast über all eine "unreported java.lang.Exception"-Warnung...

Ich mal, weil das den fehler behoben hat immer eine (wie vorgeschlagen) throws klausel angehängt. Jetzt geht das mit dieser Warnung aber durchs ganze Programm durch... und es kommt zum ExceptionInInitializerError, weil an einer Stelle (static AktPanel...) kein Lösung mehr funktioniert...:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ui;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.*;
import lib.DbFacade;
import ui.AktPanel;
import lib.HadesDb;


public class AppWnd extends JFrame {
    
    JPanel contentPane = new JPanel(); // JPanels
    
    static AktPanel topicalAkt = new AktPanel(1);
    
    JPanel totalAkts = new JPanel();
    JPanel tabs = new JPanel();
    
    int recordCounter = topicalAkt.getRecordCounter();
    BorderLayout appBorderLayout = new BorderLayout();
    
    JMenuBar appMenuBar = new JMenuBar();//Bars
    JToolBar appToolBar = new JToolBar();
    JTabbedPane tabPane = new JTabbedPane();
    
    JMenu file = new JMenu();//Menus
    JMenu settings = new JMenu();
    JMenu search = new JMenu();
    JMenu help = new JMenu();
    
    JMenuItem neu = new JMenuItem();
    JMenuItem delete = new JMenuItem();
    JMenuItem exit = new JMenuItem();
    JMenuItem edit = new JMenuItem();
    
    JMenuItem settingsDialog = new JMenuItem();
    JMenuItem passwordSetting = new JMenuItem();
    
    JMenuItem firstRecord = new JMenuItem();
  JMenuItem previousRecord = new JMenuItem();
  JMenuItem nextRecord = new JMenuItem();
  JMenuItem lastRecord = new JMenuItem();

    JMenuItem info = new JMenuItem();
    //Schaltflaechen der Symbolleiste:
  private JButton fileNewButton = new JButton(); // Neuer Datensatz
  private JButton firstRecordButton = new JButton(); // Erster Datensatz
  private JButton previousRecordButton = new JButton(); // Zurueck
  private JButton nextRecordButton = new JButton(); // Vorwaerts
  private JButton lastRecordButton = new JButton(); // Letzter Datensatz
  private JButton helpIndexButton = new JButton(); // Hilfe

  private ImageIcon newRecordImage;//Images
  private ImageIcon saveRecordImage;
  private ImageIcon firstRecordImage;
  private ImageIcon previousRecordImage;
  private ImageIcon nextRecordImage;
  private ImageIcon lastRecordImage;
  private ImageIcon helpIndexImage;
  
  
    public AppWnd() throws Exception{
        
    super("FortuneControl - die Vermögensverwaltung");
    contentPane = new JPanel(); // JPanels
    topicalAkt = new AktPanel(1);
    totalAkts = new JPanel();
    
    appBorderLayout = new BorderLayout();
    
    appMenuBar = new JMenuBar();//Bars
    appToolBar = new JToolBar();
    tabPane = new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT );
    
    file = new JMenu("Datei");//Menus
    settings = new JMenu("Einstellung");
    search = new JMenu("Suche");
    help = new JMenu("Hilfe");
    
    neu = new JMenuItem("Neuer Eintrag");
    edit = new JMenuItem("Bearbeiten");
    delete = new JMenuItem("Löschen");
    exit = new JMenuItem("Beenden");
    
    settingsDialog = new JMenuItem("Euro-Dollar-Kurs...");
    passwordSetting = new JMenuItem("Neues Password...");
    
    firstRecord = new JMenuItem("Erster Eintrag");
  previousRecord = new JMenuItem("Vorheriger Eintrag");
  nextRecord = new JMenuItem("Nächster Eintrag");
  lastRecord = new JMenuItem("Letzter Eintrag");
  
   info = new JMenuItem("Info...");
    //Schaltflaechen der Symbolleiste:
     
  newRecordImage = new ImageIcon(
        AppWnd.class.getResource("newRecord.gif"));//Images
  saveRecordImage = new ImageIcon(
        AppWnd.class.getResource("saveRecord.gif"));
  firstRecordImage = new ImageIcon(AppWnd.class.getResource(
        "firstRecord.gif"));
  previousRecordImage = new ImageIcon(AppWnd.class.getResource(
        "previousRecord.gif"));
  nextRecordImage = new ImageIcon(AppWnd.class.getResource(
        "nextRecord.gif"));
  lastRecordImage = new ImageIcon(AppWnd.class.getResource(
        "lastRecord.gif"));
  helpIndexImage = new ImageIcon(AppWnd.class.getResource("help.gif"));
  
  fileNewButton = new JButton(newRecordImage); // Neuer Datensatz
  firstRecordButton = new JButton(firstRecordImage); // Erster Datensatz
  previousRecordButton = new JButton(previousRecordImage); // Zurueck
  nextRecordButton = new JButton(nextRecordImage); // Vorwaerts
  lastRecordButton = new JButton(lastRecordImage); // Letzter Datensatz
  helpIndexButton = new JButton(helpIndexImage); // Hilfe

  fileNewButton.setToolTipText("Neuer Datensatz");
  firstRecordButton.setToolTipText("Erster Datensatz");
  previousRecordButton.setToolTipText("Vorheriger Datensatz");
  nextRecordButton.setToolTipText("N\u00e4chster Datensatz");
  lastRecordButton.setToolTipText("Letzter Datensatz");
  helpIndexButton.setToolTipText("Hilfe");
  
  appToolBar.add(fileNewButton, null); // Schaltflaeche Neuer Datensatz
    appToolBar.add(firstRecordButton, null); // Schaltflaeche
    appToolBar.add(previousRecordButton, null); // Schaltflaeche
    appToolBar.add(nextRecordButton, null); // Schaltflaeche
    appToolBar.add(lastRecordButton, null); // Schaltflaeche
    appToolBar.add(helpIndexButton, null); // Schaltflaeche
   
    file.add(neu);
    file.add(edit);
    file.add(delete);
    file.add(exit);
    
    
    settings.add(settingsDialog);
    settings.add(passwordSetting);
    
    
    passwordSetting.setEnabled(false);
    help.setEnabled(false);
    
    search.add(firstRecord);
    search.add(previousRecord);
    search.add(nextRecord);
    search.add(lastRecord);
    
    help.add(info);
    
    appMenuBar.add(file);
    appMenuBar.add(settings);
    appMenuBar.add(search);
    appMenuBar.add(help);
    this.setJMenuBar(appMenuBar);
    
    
    tabPane.add("Anlagenregister", topicalAkt);
     tabPane.add("Gesamtes angelegtes Vermögen", totalAkts);
     tabs.setSize(500, 600);
     tabs.add(tabPane);
    
     
    contentPane.setMinimumSize(new Dimension(430, 400));
    contentPane.setPreferredSize(new Dimension(430, 400));
    contentPane.setLayout(appBorderLayout);
    contentPane.add(appToolBar, BorderLayout.NORTH);
    contentPane.add(tabs,BorderLayout.AFTER_LINE_ENDS);
    this.setContentPane(contentPane);
    
    firstRecord.setEnabled(false);
    firstRecordButton.setEnabled(false);
    previousRecord.setEnabled(false);
    previousRecordButton.setEnabled(false);
    
    this.setVisible(true);
    neu.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        topicalAkt.newAkt();
      }
    });
    edit.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        topicalAkt.edit();
      }
    });
    delete.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        topicalAkt.delete();
      }
    });
  
    exit.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
                try {
                    exitApp(e);
                } catch (SQLException ex) {
                    Logger.getLogger(AppWnd.class.getName()).log(Level.SEVERE, null, ex);
                }
      }
    });
  settingsDialog.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JFrame set = new SettingsDialog();
        set.setSize(430,150);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = set.getSize();
    set.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        set.setVisible(true);
      }
    });
  passwordSetting.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JFrame set = new SettingPassword(true);
        set.setSize(100,100);
      }
    });
  firstRecord.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        firstRecord();
      }
    });
  previousRecord.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        previousRecord();
      }
    });
  nextRecord.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        nextRecord();
      }
    });
  lastRecord.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        lastRecord();
      }
    });
  
  firstRecordButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        firstRecord();
      }
    });
  fileNewButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        topicalAkt.newAkt();
      }
    });
  
  info.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        notImplemented();
      }
    });
  previousRecordButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        previousRecord();
      }
    });
  nextRecordButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        nextRecord();
      }
    });
  lastRecordButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        lastRecord();
      }
    });
helpIndexButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        notImplemented();
      }
    });

    }
    
    private void notImplemented() {
    JOptionPane.showConfirmDialog(null,
                                  "Funktion nicht implementiert.",
                                  "Nestor",
                                  JOptionPane.DEFAULT_OPTION,
                                  JOptionPane.WARNING_MESSAGE);
  }
    
     public void exitApp(ActionEvent e) throws SQLException {
    int antwort = JOptionPane.showConfirmDialog(null, "Möchten Sie wirklich beenden?",
            "FortuneControl beenden?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
    if(antwort == JOptionPane.YES_OPTION){
        DbFacade.close();           
        System.exit(0);   
   }
                if(antwort == JOptionPane.NO_OPTION){
                   setVisible(true);
                }
  }
  
  
    private void firstRecord() throws Exception {
    topicalAkt.firstRecord();
    firstRecordButton.setEnabled(false);
    firstRecord.setEnabled(false);
    previousRecordButton.setEnabled(false);
    previousRecord.setEnabled(false);
    nextRecordButton.setEnabled(true);
    nextRecord.setEnabled(true);
    lastRecordButton.setEnabled(true);
    lastRecord.setEnabled(true);
  }

  private void previousRecord() throws Exception {
    topicalAkt.previousRecord();
    //firstRecordButton.setEnabled(true);
    //lastRecordButton.setEnabled(true);
    nextRecordButton.setEnabled(true);
    nextRecord.setEnabled(true);
    lastRecordButton.setEnabled(true);
    lastRecord.setEnabled(true);
  }

  private void nextRecord() throws Exception {
    topicalAkt.nextRecord();
    firstRecordButton.setEnabled(true);
    firstRecord.setEnabled(true);
    previousRecordButton.setEnabled(true);
    previousRecord.setEnabled(true);
    //nextRecordButton.setEnabled(true);
    //lastRecordButton.setEnabled(true);
  }

  private void lastRecord() throws Exception {
    topicalAkt.lastRecord();
    firstRecordButton.setEnabled(true);
    firstRecord.setEnabled(true);
    previousRecordButton.setEnabled(true);
    previousRecord.setEnabled(true);
    nextRecordButton.setEnabled(false);
    nextRecord.setEnabled(false);
    lastRecordButton.setEnabled(false);
    lastRecord.setEnabled(false);
  }
  
  

  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            try {
                exitApp(null);
            } catch (SQLException ex) {
                Logger.getLogger(AppWnd.class.getName()).log(Level.SEVERE, null, ex);
            }
      
    }
  }
}

Naja vielleicht hast du ja noch einen Tipp...

Ps: Könntest du das mit der int-Variable(oder preparedstmt) in insertRecord() nochmal näher erklären???
 
S

SlaterB

Gast
try catch geht statt weiterleiten, für die statische Initialisierung spätestens in einem static-Block

static {
try statische Variable initailisieren catch usw.
}

-------

einen int kann man direkt zu String adden per +
 
S

SlaterB

Gast
dann hast du die Variable wahrscheinlich dort deklariert statt sie nur zu initialisieren,
vergleiche es mit einem Instanzattribut vs lokale Variable im normalen Konstruktor
 
S

SlaterB

Gast
man, wie das nervt, du postest ja nichtmal Code von deinem nicht funktionierenden Beispiel,
aber führt wohl kein Weg dran vorbei:

static int x;
static {
x = 4;
}

das war nun schwer
 

E99

Aktives Mitglied
Hey!!! Krieg dich mal wieder ein!!!

1. Hast du ja schon den, um den es geht. Nämlich in appwnd.java... Außerdem habe ich das, was du da gepostet hast einfach nicht so leicht verstanden und wollte eine Veranschaulichung...

Und du sagst es ja... Das war nicht schwer und trotzdem hast du mir geholfen... Also??? Was ist so schlimm daran???

Natürlich trotzdem danke!
 

E99

Aktives Mitglied
Ok hier bin ich nochmal...
Ich habs so probiert, aber es funzt immer noch nicht!

hier der code, so wie er jetzt ist:

Java:
static AktPanel topicalAkt;

static{
        try {
            topicalAkt = new AktPanel(1);
        } catch (Exception ex) {
           ex.printStackTrace();
        }
    }
    topicalAkt = new AktPanel(1);

in der letzten zeile sagt er:

cannot find symbol:

class topicalAkt

Wenn's nicht zu sehr stört...
 
S

SlaterB

Gast
zweimal dieselbe Codezeile zu coden, ohne Erklärung, das nervt schon, denn ergibt keinen Sinn,
abgesehen von der Grundregel mal wieder, dass man Variable = Wert nicht direkt in Klassen schreiben kann,
die Zeile muss weg und gut ist?
 

E99

Aktives Mitglied
ok. Tut mir leid...

Das war dumm von mir... :-(\

Es war natürlich auch die richtige Lösung.

ich bin zwar noch nicht ganz durch mit den Problemen (abfrage aus gui funkt noch nicht), aber ich werds erstmal allein versuchen, bevor ich dich damit nerve...

danke!!!
 

E99

Aktives Mitglied
Also gut den letzten Fehler habe ich selbst gefunden... Systematisches Suchen hilft!!!:lol:

trotzdem nochmal danke!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I H2 - GUI Tool.... sehe aber keine Tabellen Datenbankprogrammierung 2
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Z Ein haufen Fehlermeldungen aber keine Ahnung warum... Datenbankprogrammierung 9
Z Ein Haufen Fehlermeldungen und keine Ahnung... (H2 DB mit Intellij und Scene Builder ) Datenbankprogrammierung 16
V keine Verbindung möglich (Access-DB) Datenbankprogrammierung 3
OnDemand Select * from bringt keine Rückgabe Datenbankprogrammierung 49
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
J keine Werte vom PHP Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
S DB2 Express C - keine Verbindung zur Datenbank Datenbankprogrammierung 2
I Es kann keine Verbindung zum Server aufgebaut werden Datenbankprogrammierung 12
D Keine Datenbankverbindung Datenbankprogrammierung 4
M Keine Antwort der Datenbank bei updateQUery(); Datenbankprogrammierung 2
J SQL-Statement Trigger zeigt keine Wikrung PL/SQL Datenbankprogrammierung 2
W Keine ODBC-Verbindung zur MSAccess-Datenbank Datenbankprogrammierung 2
E Warum kann ich keine Datenbank mit DB2 erstellen? Datenbankprogrammierung 2
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
T JAR keine H2 driver? Datenbankprogrammierung 3
B Mysql speichert keine 0 alls String Datenbankprogrammierung 11
D Keine Einträge in die Datenbank Datenbankprogrammierung 5
Kenan89 Keine Datenbankverbindung möglich Datenbankprogrammierung 52
E JDO -> keine Maps Datenbankprogrammierung 2
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
C Derby/JavaDB JavaDB: Keine Connection Datenbankprogrammierung 7
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
C MySQL Keine Datenbankverbindung Datenbankprogrammierung 6
André Uhres SQL Abfrage erkennt keine Buchstaben mit Akzenten (z. B. é, è) Datenbankprogrammierung 3
P Hibernate -> SQL verwenden und keine Entity Datenbankprogrammierung 19
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
F Kann keine Verbindung mit HSQLDB aufbauen Datenbankprogrammierung 2
M Keine doppelten Datensätze einfügen Datenbankprogrammierung 24
C keine Verbindung zur MS-SQL-Datenbank mehr Datenbankprogrammierung 4
Y Keine verbindung mit der Datenbank Datenbankprogrammierung 2
D Keine Ausgabe der Daten Datenbankprogrammierung 3
C Keine Verbindung Datenbankprogrammierung 12
B JDBC txt File keine Row ID Datenbankprogrammierung 4
J JDBC - setAutoCommit(false) hat keine wirkung? Datenbankprogrammierung 2
S ResultSet enthält keine Daten Datenbankprogrammierung 2
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
P Es werden keine Daten mehr in die Tabelle eingefügt Datenbankprogrammierung 4
A Fehlermeldung: Keine Daten verfügbar Datenbankprogrammierung 2
M Hilfe - keine Connection zur DB Datenbankprogrammierung 4
C Keine Verbindung zu HSQLDB möglich Datenbankprogrammierung 22
G Keine Aussicht mit Prepared Statement Datenbankprogrammierung 10
I Nach export zur .jar keine verbindung mehr Datenbankprogrammierung 7
I Kann keine Daten aus ResultSet holen ? Datenbankprogrammierung 11
J Keine Connection zur MySQL Db Datenbankprogrammierung 6
I Keine Treiber-Klasse! Datenbankprogrammierung 9
K keine Verbindung zu mysql Datenbank Datenbankprogrammierung 11
W Keine leeren Felder bei Access Datenbankprogrammierung 15
M Bekomme keine Daten in die DB! Datenbankprogrammierung 11
H Kann keine Verbindung zur DB herstellen Datenbankprogrammierung 7
G linux mysql keine verbindung Datenbankprogrammierung 8
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
A MySQL Select und Insert in Java Datenbankprogrammierung 15
S PostgreSQL Bytea INSERT Datenbankprogrammierung 8
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
A Oracle insert Array in DB Datenbankprogrammierung 7
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
M Derby/JavaDB Derby SQL Insert mit AUTO_INCREMENT, welche ID wurde vergeben? Datenbankprogrammierung 6
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
B MS SQL: Insert LOB Datenbankprogrammierung 4
M MySQL INSERT will einfach nicht funktionieren Datenbankprogrammierung 9
H HSQLDB insert .... values("test1",select test2 from foo) Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
R vor/nach INSERT mysql-SETS absetzen Datenbankprogrammierung 2
C insert into mit between-Anweisung Datenbankprogrammierung 10
C Derby/JavaDB INSERT auf FOREIGN KEY schlägt fehl Datenbankprogrammierung 2
F Insert into Access Datenbankprogrammierung 3
S Nochmals: ID ermitteln nach Insert Datenbankprogrammierung 2
S ID Wert von Insert über jdbcTemplate.update Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
B SELECT ja - INSERT nein (MySQL) Datenbankprogrammierung 3
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben