2011-05-18 12 views
7

Estoy tratando de iniciar Derby en modo de servidor de red desde mi aplicación Java con el puerto por defecto. El servidor comienza con éxito. Ahora intento conectarme a un DB llamado 'myDB' en el servidor. La conexión se establece y db.lck se crea con éxito. Yo, entonces, hago un par de transacciones, comprometo y cierro la conexión, con gracia. Veo que db.lck todavía está allí. Luego apago el servidor de red. Espero que el archivo db.lck se elimine al final de todas estas operaciones. Pero se queda. (PS: SO es Windows)Conclusión del servidor de red Derby duerma borrar db.lck

siguiente es el código:

1) Iniciar el servidor:

System.setProperty("derby.system.home", "C:\\SI\\testDerby"); 
System.setProperty("derby.drda.traceDirectory", "C:\\SI\\trace"); 
System.setProperty("derby.drda.traceAll", "true"); 
System.setProperty("derby.drda.logConnections", "true"); 
System.setProperty("derby.connection.requireAuthentication", "false"); 

serverHandle = new NetworkServerControl(); 
// Write server console messages to system output 
serverHandle.start(new PrintWriter(System.out)); 

2) Conexión a DB

final String PORT = 1527; 
String driver = "org.apache.derby.jdbc.ClientDriver"; 
String dbName = "myDB"; 
String connectionURL = "jdbc:derby:" + "//localhost:" 
      + PORT + "/" + dbName + ";create=true"; 
Class.forName(driver).newInstance(); 
Connection conn = DriverManager.getConnection(connectionURL); 
Statement stmt = conn.createStatement(); 
boolean success = stmt.execute("DROP TABLE USERS"); 
PreparedStatement statement = conn.prepareStatement("CREATE TABLE USERS (id BIGINT not null, name VARCHAR(20))"); 
success = statement.execute(); 
conn.commit(); 
conn.close(); 

3) Conclusión del servidor

serverHandle.shutdown(); 

Can anyon e por favor ayúdame con esto? Necesito que se borre el archivo db.lck cuando cierro la conexión o cierro el DB. Creo que me estoy perdiendo algo. Gracias por adelantado.

Respuesta

2

Quizás cerrar el servidor no cierre la base de datos; trate de hacer un cierre de base de datos explícita antes de apagar el servidor, tal como se describe aquí: http://db.apache.org/derby/docs/10.8/devguide/tdevdvlp40464.html#tdevdvlp40464

+0

Gracias por la respuesta. Creo que el método de cerrar la base de datos mencionado en la URL es únicamente para un derby integrado y no para el servidor de red. Intenté lo mismo con el servidor de red (es decir, llamando getConnection con "; shutdown = true" anexado a la URL). Toco una excepción SQLNonTransientConnectionException con la siguiente causa raíz: Causado por: org.apache.derby.client.am.SqlException Error DERBY SQL: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: cierre de la base de datos 'myDB'. –

+1

Pero sí, el archivo de bloqueo en este caso fue eliminado. ¿Alguna idea de por qué arroja una excepción aquí? –

+2

Así es como se comporta Derby. Cerrar la base de datos arroja una excepción. Es un poco incómodo, pero el SQLSTATE es bastante identificable, así que le recomiendo que simplemente detecte e ignore esa excepción. –

Cuestiones relacionadas