Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread

derdudi

Neues Mitglied
Hallo,

Ich habe gerade ein Probleme mit dem Einfügen eines Wertes in einer Datenbank und einem Sleep Thread. Aber eines nach dem anderen. Ich habe eine insertdb Klasse, die sich mit der Datenbank verbindet. Der Code ist in Netbeans geschrieben und die Datenbank würde mit MYSQL Workbench erstellt

Code:
Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(url, username, password);
        String insert = "INSERT Into tiefgarage(Anzahl, Uhrzeit, Datum) VALUES  ('+ get.FreieParkplätze() +',CURTIME(),CURDATE())";
        PreparedStatement ps = connection.prepareStatement(insert);

Der Getter FreieParkplätze soll seinen Wert aus einer anderen Klasse holen, der die Anzahl widergibt. Aber so wie jetzt funktioniert der Code nicht, er holt die Anzahl nicht aus dem get.FreieParkplätze. Es kommt ein Compiler Fehler, das er get.FreieParkplätze nicht findet. Die Klassen sind alle public.

Das zweite Problem ist, dass ich einen Sleep Thread erstellt habe, der diesen insertdb nur jede volle Stunde ausführen soll. Aber das klappt auch nicht so wirklich, ich weiß nicht wie ich diesen nur für die insertdb Klasse ausführen.

Code:
    public static void main(String[] args) {
      
        ScheduledExecutorService t = Executors.newSingleThreadScheduledExecutor();
        t.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3600000);
                } catch (Exception e) {
                }
            }
        }, 0, 1, TimeUnit.HOURS);
    }
}

Liebe Grüße und Danke schonmal für eure Hilfe!
DUDI
 
Zuletzt bearbeitet:
Zum ersten Problem:
Zeig doch mal, wie deine anderen Klassen aussehen.
Den Ausdruck get.FreieParkplätze() halte ich für ziemlich suspekt.
Zum zweiten Problem:
Java:
t.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        try {
            insertIntoDb();
        } catch (Exception e) {
            throw new RuntimeException("Could not insert into database", e);
        }
    }
}, 0, 1, TimeUnit.HOURS);
Dabei ist "insertIntoDb()" eine Methode, die eben genau den Code enthält, um einen Datensatz in die Datenbank einzufügen (wie von dir oben gezeigt).
Du brauchst auch nicht Thread.sleep() aufzurufen, da der ExecutorService bzw. dein scheduleAtFixedRate(..., 0, 1, TimeUnit.HOURS) ja schon dafür sorgt, dass das Runnable 1 Mal pro Stunde ausgeführt wird.
 
Code:
public class FahrzeugBean {

    public int getFreieparkplätze() {
        return freieparkplätze;
    }

    private void setFreieparkplätze(int freieparkplätze) {
        this.freieparkplätze = freieparkplätze;
    }

    int freieparkplätze = Fahrzeuganzahl.getFreieParkplätze();
}

Das ist der Code der eine Anzahl der freien Parkplätze überliefert bekommt, das funktioniert auch. Von der Klasse möchte ich dann eben die Anzahl jede Stunde überliefern.

Ahja ok, also hab ich das doppelt gemoppelt gemacht. Das mit dem insertintoDB funktioniert dann einfach so? Weiß nicht genau wie ich die Methode schreiben soll und wo.

Grüße
 
Zuletzt bearbeitet:
Dann brauchst du ja erstmal eine Instanz der Klasse FahrzeugBean.
Nennen wir sie mal "fahrzeugBean" und nehmen wir auch an, dass es ein Feld in der Klasse mit deinem Datenbank-Statement ist. So dann würde dein Code so aussehen:
Java:
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(url, username, password);
String insert = "INSERT Into tiefgarage(Anzahl, Uhrzeit, Datum) VALUES  ('"+ fahrzeugBean.getFreieParkplätze() +"',CURTIME(),CURDATE())";
PreparedStatement ps = connection.prepareStatement(insert);
 

Neue Themen


Zurück
Oben