tutorial manager lobs data hsqldb

manager - Error de adquisición de bloqueo de base de datos y hsqldb



hsqldb tutorial (7)

Acabo de cerrar NetBeans, borré database.lck y ejecuté la aplicación nuevamente. Todo funcionó bien.

Estaba tratando de conectarme a una base de datos hsql. Creé una ejecutando desde C: / myhsql:

java -cp .;C:/hsql/lib/hsqldb.jar org.hsqldb.Server -database.0 file:db/mydb -dbname.0 MYDB

Esto creó mydb en un directorio llamado db . Esta carpeta ahora tiene un archivo .lck, tmp, script, propiedades con el nombre mydb y archivos similares con el nombre MYDB en la carpeta actual.

En código java lo intenté

Class.forName("org.hsqldb.jdbcDriver"); connection = DriverManager.getConnection("jdbc:hsqldb:file:db/sjdb", "SA", "");

Cuando ejecuto el programa, recibo este error:

java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:/myhsql/db/mydb.lc k, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms. ...

Aquí está el stacktrace:

java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:/myhsql/db/sjdb.lc k, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms. at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at ConnectHSQLDB.main(ConnectHSQLDB.java:20) Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:/myhsql/db/sjdb.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms. at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source) at org.hsqldb.persist.Logger.acquireLock(Unknown Source) at org.hsqldb.persist.Logger.openPersistence(Unknown Source) at org.hsqldb.Database.reopen(Unknown Source) at org.hsqldb.Database.open(Unknown Source) at org.hsqldb.DatabaseManager.getDatabase(Unknown Source) at org.hsqldb.DatabaseManager.newSession(Unknown Source) ... 6 more java.lang.NullPointerException at ConnectHSQLDB.main(ConnectHSQLDB.java:32)

¿Alguien puede decirme que estoy haciendo mal? Puedo conectarme a la base de datos utilizando SwingDBManager y puedo insert , delete y select registros en la base de datos. No estaba ejecutando DBManager cuando probé el código Java. Aún así el problema de bloqueo pasa.


El primer comando inicia un servidor. Este servidor bloquea los archivos de la base de datos para que "otros" no puedan modificarlos. Debería usar "-dbname.0 mydb" en lugar de "MYDB", ya que debería estar en minúsculas.

Su URL de conexión de Java para conectarse a la base de datos es incorrecta. Debe usar "jdbc: hsqldb: hsql: // localhost / mydb" como la cadena de conexión. Mientras que los archivos de la base de datos están bloqueados por el servidor, puede acceder al servidor de la base de datos pero no puede acceder a la base de datos "en proceso" con un archivo: URL.


Lo que sea que hayas intentado es correcto.

No tiene que iniciar el servidor HSQLDB utilizando el comando java separado, no se requiere la línea inferior, ya que bloqueará la base de datos. Evitar que otro proceso inicie y bloquee db.

java -cp .;C:/hsql/lib/hsqldb.jar org.hsqldb.Server -database.0 file:db/mydb -dbname.0 MYDB

solo ejecuta el programa jdbc

java -cp hsqldb.jar HSQLAccess

debajo de la linea

jdbc:hsqldb:file:db/sjdb

Se iniciará la base de datos y dará resultado.

De esta manera, no tiene que iniciar el servidor por separado, solo tiene que ejecutar el programa, que iniciará y detendrá HSQLDB por usted.

import java.sql.*; public class HSQLAccess { public static void main(String args[]) throws Exception { Connection con = null; try { Class.forName("org.hsqldb.jdbcDriver"); con = DriverManager.getConnection("jdbc:hsqldb:file:db/sjdb", "sa",""); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM CMDS_WO_MASTER"); while(rs.next()) { System.out.println(rs.getString(1)); } con.close(); } catch(Exception ex ) { ex.printStackTrace(); } finally { if(con!=null) { con.close(); } } } }


Me enfrento a este error porque quería ver una base de datos abierta actualmente en otro cliente como la IntelliJ database mientras el servidor usa la misma db

así que para que hsql db pueda conectarse a múltiples clientes, use

hsqldb.lock_file=false

entonces la url de conexión será como

jdbc:hsqldb:file:./db/myDbInFile;hsqldb.lock_file=false


Si tiene algún otro cliente en ejecución que se conecte a su base de datos, debe cerrarlo.


en mi Mac, el puerto para Connector en HTTP cambió de 8080 a 8443 en server.xml. y eso es lo que me estaba dando este error: tanto el esquema HTTP como el HTTPS estaban usando el mismo puerto


intente usar la siguiente url de conexión en windows connection = DriverManager.getConnection ("jdbc: hsqldb: file: /// c: / hsqldb / mydb", "SA", "");