Base de datos local en Java

MaSoBa

Me estoy volviendo un poco loco. Quiero que mi programa incorpore localmente una base de datos. Me recomendasteis Sqlite y perfecto, en mi ordenador funciona bien. Pero no me di cuenta que tengo que crear la base de datos dentro del ejecutable para que funcione en todos los ordenadores.

El caso es que no sé muy bien como hacerlo, ya que en mi ordenador tengo instalado todo lo necesario para que se conecte a la base datos. Pero en un portátil se me cierra en cuanto hago la conexión. Mi preguntar es como integrar todo lo necesario en el ejecutable para que funcione. No busco que me digáis paso por paso lo que debo hacer. Solo necesito alguien que me oriente por donde debo tirar.

    Connection conexion;

//Conectar a la base de datos sqlite
public void conectar() {
    conexion = null;
    try {
        Class.forName("org.sqlite.JDBC");
        conexion = DriverManager.getConnection("jdbc:sqlite:test.db");

        Statement stmt = conexion.createStatement();
        stmt.executeUpdate("create table if not exists tomo (IDTomo INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
                + "Portada TEXT,"
                + "Precio REAL NOT NULL,"
                + "EditorialUSA TEXT NOT NULL,"
                + "EditorialESP TEXT NOT NULL,"
                + "Superheroe TEXT,"
                + "Titulo TEXT NOT NULL,"
                + "Genero TEXT NOT NULL,"
                + "Paginas TEXT NOT NULL,"
                + "FechaEdicion TEXT NOT NULL,"
                + "Guionista TEXT NOT NULL,"
                + "Dibujante TEXT NOT NULL,"
                + "Enlace TEXT NOT NULL)");
    } catch (Exception e) {
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
        System.exit(0);
    }
    System.out.println("Base de datos abierta");
}

Edito: Me acabo de fijar en una cosa. Al crear el .jar también se crea una carpeta con las librerías... Perdón por el retraso, es el primer proyecto que hago por mi cuenta y en clase nunca solemos crear el .jar. Probamos y corregimos el programa desde el IDE.

No sé porqué se ha vuelto loco el codigo que he pegado...

Grender

Buenas, lo primero sería cargar la base de datos desde dentro del propio programa, no uses un FileInputStream ni nada por el estilo, tienes que acceder a través del soporte que ofrece la máquina virtual, es decir: con los métodos "Class.getResource()" o "Class.getResourceAsStream()"

Ten en cuenta que si quieres que tu base de datos esté incluida dentro del .jar solo tendrá permisos de lectura por lo que no podrás escribir en ella. En caso de que quieras modificarla te recomiendo hacer un instalador (con programas como Launch4j y/o InnoSetup puedes hacerlo fácilmente) y que a la hora de instalarlo cree la base de datos.

Otra opción es que la primera vez que se abra el .jar se compruebe si la base de datos existe en el directorio que especifiques y en caso de que no exista, la crees.

Un saludo.

PD: Te recomiendo usar esto: "jdbc:sqlite::resource:test.db"

2 1 respuesta
MaSoBa

#2 Entiendo. Me he dado cuenta de lo que busco en verdad no es que esté dentro del .jar ya que se hacen muchas modificaciones con el programa.

Creo que ya he solucionado el problema. Simplemente no me di cuenta que al crear el .jar se me creaba otra carpeta con el .jar del sqlite-jdbc.

Así que supongo, que cuando termine mi proyecto, tengo que crear un instalador ¿verdad? Lo que quiero es que el usuario solo tenga que dar doble click, instalar y que tenga un acceso directo para iniciar el programa.

Se aprende mucho haciendo proyectos por tu cuenta, me gusta.

Usuarios habituales

  • MaSoBa
  • Grender