Como conectarse desde Java a una base datos Openffice

Como conectarse desde Java a una base datos Openffice

| July 4, 2011 | 1 Comment

Tenemos una base de datos creada desde OpenOffice, usando OpenOffice Base. Base es una aplicación de creación de bases de datos sencilla similar al Access de Microsoft. La pregunta que vamos a tratar de abordar en este post es:

¿Como conectarnos desde una aplicación Java a esta base de datos?

Para empezar, hay que aclarar tres aspectos importantes respecto a OO Base:

  • El motor interno de base de datos que usa Base es HSQLDB.
  • La extensión de los ficheros generados por Base son .odb
  • Estos ficheros son en realidad archivos comprimidos (del tipo zip).

Construyamos entonces un caso de prueba.

Pasos a seguir

1. Preparar la base de datos Base a la cual vamos a acceder.

  • Crear una nueva Base de datos mediante OpenOffice (por ejemplo mydb.odb)
  • Creamos una tabla dentro de la base de datos (por ejemplo User).
  • Creamos tres columnas dentro de la tabla (ID, firtsname, lastname).
  • Rellenamos la tabla con algunas columnas.

2. Preparar la base de datos HSQLDB.

  • Renombramos el fichero mydb.odb para que pase a ser mydb.zip y extraemos de este fichero comprimido el directorio database. Este directorio contiene los siguientes ficheros: backup, data, properties, script.
  • Copiamos los ficheros a una ubicación separada, por ejemplo C:\mydb\ejemplo
  • Renombramos todos los ficheros añadiendole el prefijo mydb, quedando así: mydb.backup, mydb.data, mydb.properties, mydb.script.
  • Estos ficheros constituyen la base datios HSQLDB.

3. Uso de la API JDBC para el acceso a la base de datos.

  • Descargar hsql_1_8_0_10.zip (HSQL BD ENGINE) desde http://sourceforge.net/project/downloading.php?group_id=23316&use_mirror=ovh&filename=hsqldb_1_8_0_10.zip&84223716. Este sería el driver específico de java para HSQL.
  • Extraemos el contenido del fichero zip y buscamos dentro de este el driver: hsqldb.jar.
  • Creamos un nuevo proyecto Java.
  • Añadimos el fichero hsqldb.jar al classpath del proyecto para que pueda hacer uso de él.
  • El resto es usar la api JDBC de Java para conectarnos a la base de datos, tema que no trataremos en este post. Me limitaré a exponeros el código que podeís emplear-

Código fuente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.text.ParseException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Main
{
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws ParseException
{
 try
 {
    String db_file_name_prefix = "c:\\mydbdir\\mydb";
    Connection con = null;
    // Cargamos el diver de HSQL Database Engine JDBC
    // hsqldb.jar debería estar en el classpath or formar parte del jar actual
    Class.forName("org.hsqldb.jdbcDriver");
    // Conectamos a la base de datos.   Esto cargará  los ficheros db y arrancará
    // la base de datos si no esta arrancada aún.
    // db_file_name_prefix es usado para crear o abrir ficheros que mantienen el estado
    // de la base de datos
    // Puede contener nombres de directorios relativos a el
    // directorio de trabajo actual
    con = DriverManager.getConnection("jdbc:hsqldb:file:" + db_file_name_prefix, // ficheros
    "sa", // usuario
    "");  // contraseña
    Statement statement = con.createStatement();
    //Buscamos la columna nombre en la tabla
    ResultSet rs = statement.executeQuery("SELECT * FROM \"User\"");
    //Imprimimos el resultado
    while (rs.next())
    {
      System.out.print("ID: " + rs.getString("ID"));
      System.out.print(" first name: " + rs.getString("firstname"));
      System.out.println(" last name: " + rs.getString("lastname"));
    }
    //cerramos la conexiones
    statement.close();
    con.close();
   }catch (SQLException ex)
   {
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
     ex.printStackTrace();
   } catch (ClassNotFoundException ex)
   {
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
   }
  }
}

Conclusión

El fichero de extensión odb es un fichero comprimido (zip), por lo que los primeros pasos son un poco incómodos. Para evitar esto podemos hacer esos mismos pasos desde el propio código Java, para ello podemos hacer uso de la API de Java para tratar con ficheros comprimidos y que veremos en un post posterior.