Einfache HSQLDB? (lock acquisition failure)

berndjav

Neues Mitglied
Hallo Forum,

ich würde gern eine ganz einfache HSQL-Datenbank erstellen und mit Java darauf zugreifen. Und zwar NUR unter Verwendung von JDK/javac.exe, einem Editor (Notepad++), der Windows Eingabeaufforderung, und dem, was in der hsqldb-2.4.1.zip enthalten ist. Falls das überhaupt möglich ist.

Natürlich habe ich bereits veschiedene Tutorials ausprobiert, aber ganz so, wie es dort beschrieben ist, funktioniert es leider nicht.

Mein Ansatz, wie ich es probiert habe: Erstellen einer HSQL-Datenbank mit runManager.bat, diese dann in der Windows-Eingabeaufforderung starten, da bekomme ich auch noch als Ergebnis die Ausgabe mit

[Server@6b884d57]: Startup sequence initiated
etc. etc. etc.


wie es sein sollte, soweit ohne Fehlermeldung.

Aber dann mit einem einfachen Java-programm darauf zugreifen, bringt den Fehler
Database lock acquisition failure

Mich über diese Fehlermeldung schlau machend, fand ich im Internet nur die Angabe, dass das eben so ist, dass beim Starten der Datenbank auf diese Weise gegen weitere Zugriffe gesperrt ist - also eigentlich Verhalten wie es soll.

Ich verstehe nur nicht, wie es in den Tutorialen dann gemeint ist, die es so beschreiben, dass man eben nach dem Starten der Datenbank auf diese Weise mit einem Java-Programm darauf zugreifen soll?

Irgendwas fehlt mir da noch, um es zu verstehen.

Jetzt noch meine - noch nicht ganz funktionierende - Vorgehensweise im Detail:

1. runManager.bat gestartet und folgendes eingegeben:
eee5kehh_jpg.htm

https://www.directupload.net/file/d/5333/eee5kehh_jpg.htm

2. Eine einfache Tabelle erstellt:
9v6fwfcj_jpg.htm

https://www.directupload.net/file/d/5333/9v6fwfcj_jpg.htm

3. SHUTDOWN und Execute

4. Datenbank starten:
nodfoj8g_jpg.htm

https://www.directupload.net/file/d/5333/nodfoj8g_jpg.htm

5. Dann in einem anderen Eingabeaufforderung-Fenster (das erste, wo die Datenbank gestartet, ist ja noch "beschäftigt") das Java-Programm kompiliert und gestartet - leider mit Fehler:
o7assgz7_jpg.htm

https://www.directupload.net/file/d/5333/o7assgz7_jpg.htm

Und hier mein Java-Programm:

Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HsqlDbBeispiel02 {
    public static void readQuatschkopf() {
        Connection connect = null;
        String urlQuatschkopf = "jdbc:hsqldb:file:QUATSCHKOPF";
        try {
            connect = DriverManager.getConnection(urlQuatschkopf, "SA", "");
            Statement stmt = connect.createStatement();
            ResultSet rs =  stmt.executeQuery("SELECT SP_VORNAME, SP_NACHNAME FROM TA_PERSONEN");          
            while(rs.next()) {
                System.out.println(rs.getString("SP_VORNAME") + " " + rs.getString("SP_NACHNAME"));
            }
            rs.close();
            stmt.close();
        }
        catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        finally {
            try {
                if (connect != null)
                    connect.close();
            }
            catch (SQLException e) {
                System.err.println(e.getMessage());
            }
        }
    }

    public static void main(String[] args) {
        readQuatschkopf();
    }  
}

Danke im Voraus für jede Hilfe.
 
https://stackoverflow.com/questions/3968595/database-lock-acquisition-failure-and-hsqldb
(erste Antwort liefert die Lösung)
Your Java connection URL to connect to the database is wrong. You should use "jdbc:hsqldb:hsql://localhost/mydb" as the connection string
Du versuchst genauso wie der Fragesteller auf SO, eine JDBC-Verbindung auf die Datei der Datenbank (die bereits vom HSQLDB-Server gelockt ist) zu erzeugen. Das schlägt fehl. Du musst stattdessen gegen den Socket vom HSQLDB-Server verbinden.
 
Super, danke für die schnelle Antwort! Diesen stackoverflow-Beitrag (und die Antwort) hatte ich zwar bereits gelesen, aber dieser war mir zuerst auch nicht ganz klar.

Dann hat es mich, auch durch Deien Hinweis, aber doch noch zur richtigen Lösung inspiriert.

Die url muss lauten:

Code:
String urlQuatschkopf = "jdbc:hsqldb:hsql://localhost/QUATSCHKOPF";

So funktioniert es.

Vielen Dank.
 
Zuletzt bearbeitet:

Zurück
Oben