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:
PS: ich hoffe, ihr versteht etwas vom Quelltext...:-/// (und jmd. kann mir helfen...)
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...)