[RESOLVIDO]Aplicaão java com banco embarcado HSQLDB? como fazer rodar?

23 respostas
Z

Olá a todos.
galera está na véspera do meu TCC e de uma hora para outra optei por tentar trocar o meu banco de dados que era mysql, para o HSQLDB.

troquei porque minha aplicação é desktop e pretendo fazer instalador, e como o HSQLDB é um banco que é embarcado junto com a aplicação, isso facilitará muito.

agora como fazer isso corretamente, li alguns tutoriais na internet mais não achei um passo a passo.

tenho algumas dúvidas
por exemplo: o banco ele vem em .zip quando baixado, eu devo extrair ele dentro do projeto que estou desenvolvendo?

Eu não achei um JDBC driver, falaram que o JDBC vem incluso com o zip e esta dentro de hsqldb.jar, então adicionei esse jar inteiro como biblioteca, não deu certo, mas gostaria de saber se estou no caminho certo?

Algum pode me indicar algum vídeo, ou um tutorial que explica isso mais detalhadamente, porque nunca me deparei com esse banco antes, apenas passei a conhecê-lo há dois dias.

espero que alguém possa me ajudar. obrigado desde já.

23 Respostas

S

Eu uso o H2 embarcado! maravilhoso!

pego o.jar jogo na biblioteca e pronto!

http://www.h2database.com/html/download.html

clicando em Sourceforge.net vc faz o dowload do .jar

na aplicação:

cria conexão:

package Conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.h2.tools.Server;

/**
 *
 * @author Sandro Softwares
 */
public class CriaConexao {

    static String DRIVER_H2 = "org.h2.Driver";
    static Server servidor;
    static String URL_H2 = "jdbc:h2:tcp://localhost/db/NOMEDOSEUBANCO";
            
    static String USER_H2 = "administrador";
    static String PASSWORD_H2 = "XXXXXXX";
    private static Connection conexao_H2 = null;

    public static Connection getConexao() throws SQLException {

        if (conexao_H2 == null) {
     
            try {
                servidor = Server.createTcpServer();
                servidor.start();
                System.out.println("Servidor inicializado");
            } catch (SQLException ex) {
                StringBuffer mensagem = new StringBuffer("Não foi possível iniciar o servidor");
                mensagem.append("\nMotivo: " + ex.getMessage());
            }
            try {
                Class.forName(DRIVER_H2);
                System.out.println("Conectando ao banco H2");
                conexao_H2 = DriverManager.getConnection(URL_H2, USER_H2, PASSWORD_H2);
                return conexao_H2;
            } catch (ClassNotFoundException e) {
                System.out.println("erro" + e + "\n\n");
                throw new SQLException(e.getMessage());
            }
        } else {
            return conexao_H2;
        }
    }

}
Cria uma tabela:
/**
 *
 * @author SandroSoftwares
 */
public class CriaTabelasDoBancoDao {

    private Connection conexao;

 public CriaTabelasDoBancoDao() throws SQLException {
        this.conexao = CriaConexao.getConexao();
    }

    public void criaTabelas() throws SQLException {
String sql = " DROP TABLE IF EXISTS lembrete;"
                        + " CREATE TABLE lembrete ("
                        + "   idLembrete INTEGER unsigned NOT NULL AUTO_INCREMENT,"
                        + "   lembrete text,"
                        + "   dataLembrete date DEFAULT NULL,"
                        + "   horaLembrete time DEFAULT NULL,"
                        + "   PRIMARY KEY (idLembrete)"
                        + " );"
PreparedStatement stmt = conexao.prepareStatement(sql);
                stmt.execute();
                stmt.close();
}
}
S

ZeTripe:
Olá a todos.
galera está na véspera do meu TCC e de uma hora para outra optei por tentar trocar o meu banco de dados que era mysql, para o HSQLDB.

troquei porque minha aplicação é desktop e pretendo fazer instalador, e como o HSQLDB é um banco que é embarcado junto com a aplicação, isso facilitará muito.

agora como fazer isso corretamente, li alguns tutoriais na internet mais não achei um passo a passo.

tenho algumas dúvidas
por exemplo: o banco ele vem em .zip quando baixado, eu devo extrair ele dentro do projeto que estou desenvolvendo?

Eu não achei um JDBC driver, falaram que o JDBC vem incluso com o zip e esta dentro de hsqldb.jar, então adicionei esse jar inteiro como biblioteca, não deu certo, mas gostaria de saber se estou no caminho certo?

Algum pode me indicar algum vídeo, ou um tutorial que explica isso mais detalhadamente, porque nunca me deparei com esse banco antes, apenas passei a conhecê-lo há dois dias.

espero que alguém possa me ajudar. obrigado desde já.

amigo é isso mesmo, coloque o hsqldb.jar no class path da sua aplicação, feito isso abra EXATAMENTE esse lib e crie seu banco de dados, importante ser do tipo standalone.
criado o banco, ele vai criar um arquivos no seu classpath e tudo mais.

se você criar o .jar do seu sisteminha, você tem que se certificar que o .jar vai estar lendo corretamente o banco de dados, por isso aconcelho deixar dentro da pasta lib.

mas da uma corridinha ai que você consegue sim.

H

Aqui tem um exemplo de testes com JUnit utilizando o HSQLDB.

Para utilizar em uma aplicação JSE é a mesma coisa. [=

Z

Muito obrigado a todos que estão me ajudando.
mais ainda estão conseguindo desenvolver

Para teste eu fiz um projeto, tudo certo, funcionando certinho aqui no meu PC, eu fiz o .jar, ao executar no meu PC, também funcionou legal, mas quando levei esse .jar para um outro computador, o programa rodou, mas não acessou o banco
porque é como se fosse uma agenda com os campo ID e NOME, já há alguns dados que cadastrei direto, e ao iniciar o software no meu pc, o programa carrega os dados normal, 100%
mais ao inicia-lo em outro pc, já não carrega nada.

Para mim um banco embarcado é o que vai junto com a aplicação e o usuário que instalar o meu programa ao precisará instalar um banco. Espero estar certo.

dentro da lib eu apenas coloquei o .jar do hsql, ja tentei também colocar o banco inteiro, mais deu na mesma.

no projeto eu tenho a pasta src - das clases
as bibliotecas
e uma pasta lib, onde há o .jar do banco

Quero criar esse exercício e o fazer rodar em qualquer pc que executar o .jar, como devo fazer ? prentendo fazer o instalador.

S

Para mim um banco embarcado é o que vai junto com a aplicação e o usuário que instalar o meu programa ao precisará instalar um banco. Espero estar certo.

mais ao inicia-lo em outro pc, já não carrega nada.

o banco foi criado no código do seu programa???

se não foi criado, ou você cria dentro do software ou vc carrega o arquivo que contem o banco do seu computador para o outro pc.

no caso do h2 que uso, se eu não criasse o banco via software e quisesse usa-lo em outro computador teria que carregar o arquivo MEUBANCO.h2

Z

Eu já tentei colocar o banco hsql inteiro dentro do projeto do eclipse na asta lib
já tentei colocar só o .jar do banco lib na pasta lib.
no meu caso essa pasta lib não fica dentro do SRC, pois quando estava la dentro o eclipse acusou erro em todos.
já tentei fazer o inno setup instalar os que veio no .zip quando baixei o banco hsqldb.

e tudo deu na mesma, só funciona dentro do meu pc, quando tento colocar em outro não roda.

eu só quero alguma coisa do tipo

O meu sistema roda no pc que instalar perfeitamente, com o banco.

eu baixei o H2 e instalei, mais parece bem mais complicado, eu por exemplo nunca vi esse negocio de server , ficou bem complicado.
eu sou novo nessa de banco embarcado, o curso técnico que faço, nunca tocou no assunto de banco embarcado, apenas bancos server, como o mysq por exemplo.

agora o hsqldb parece estar perto, pois pelo menos ele roda perfeitamente no meu pc.
agora preciso fazer ele rodar quando instalado em outro pc, ai meu sistema estará pronto.

obrigado pela ajuda, estou correndo contra o tempo. Pois quero migrar o banco do meu tcc o mais rápido possível para um banco embarcado, que possa ser instalado sem problemas no pc de qualquer pessoa que quiser usar o sistema.

S

No seu projeto o seu banco está a onde? qual diretório?

no meu caso com o h2, o banco não fica dentro da pasta lib, fica simplesmente dentro da pasta do projeto.

Z

Coloquei o meu banco dentro da pasta llib
mas também ja tentei dentro do projeto apenas
e também tentei fazer o inno setup instala-lo dentro do mesmo diretório da aplicação, também sem sucesso

S

posta ai o código de conexão… (sem senhas é claro…)

Z

ela é bem simples

public abstract class Conexao {
	
	public static Connection conectarBanco() throws SQLException{
		
		return DriverManager.getConnection("jdbc:hsqldb:file:/guarda/guardanomes", "sa", "");
			
	}
}
S

vê esse post:

http://javafree.uol.com.br/topic-879081-Hsql-embarcado.html

S

tenta tirar essa barra:

return DriverManager.getConnection(“jdbc:hsqldb:file:[size=18][color=red]/[/color][/size]guarda/guardanomes”, “sa”, “”);

Z

quando executo em outro pc o erro que informa no getmessagem di assim

“user lacks privilege or object not found: PESSOAS”

isso significa que ele faz a conexão e não encontra a tabela ?

no post que você madou, o rapaz que pergunta falou que copio os arquivos

.properties
.script
.lck
.log

para a pasta do projeto, no meu caso o meu banco não gerou esses arquivos, eu vi um video que esses arquivos eram gerados na pasta Data, mais aqui não gerou, e eu copie o projeto do banco inteiro para o projeto, mesmo assim não deu certo :S
está bem dificil :confused:

eu retirei essa barra, mais sem ela, o sistema não rodou nen no meu pc.

S

Cara, com o h2 é tão simples: (via netbeans)

  1. clico na pasta do projeto vou em propriedade e em biblioteca adiciono o .jar do h2

  2. pronto…

classes e etc…

na hora de exportar quando crio o .jar pelo netbeans já vem junto com ele a biblioteca lib que eu PRECISO carregar junto com esse .jar do meu projeto colocando-os no mesmo lugar (a pasta lib e o meuprograma.jar)

Z

Parece simples mesmo :confused:
mais mesmo assim obrigado pela sua ajuda.
estou procurando bastante aqui.
se conseguir retorno no post para colocar a solução.
muito obrigado mesmo.

S

fiz um exemplo de classe de conexão com o h2 mais simples que a anterior... pra vc ver...

package Conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author Sandro Softwares
 */
public class CriaConexao {

    static String DRIVER_H2 = "org.h2.Driver";
    static String URL_H2 = "jdbc:h2:db/meuBancoDB;";
    static String USER_H2 = "administrador";
    static String PASSWORD_H2 = "xxxxx";
    private static Connection conexao_H2 = null;

    public static Connection getConexao() throws SQLException {

        if (conexao_H2 == null) {
       
            try {
                Class.forName(DRIVER_H2);
                System.out.println("Conectando ao banco H2");
                conexao_H2 = DriverManager.getConnection(URL_H2, USER_H2, PASSWORD_H2);
                return conexao_H2;
            } catch (ClassNotFoundException e) {
                System.out.println("erro" + e + "\n\n");
                throw new SQLException(e.getMessage());
            }
        } else {
            return conexao_H2;
        }
    }

}

tudo que já usamos normalmente em qualquer conexão... sem servidor etc...

aqui roda legal...

S

te mandei um link de um projeto meu aqui com H2.

vê se te ajuda ai…

S

esse tutorial aqui do HSQLDB pode salvar vc…

http://jdbframework.com/tutorial/tutorial_23/tutorial_23.php

vi muita coisa importante aqui…

Z

vou olhar esse post sim, estou topando de tudo, pois se não conseguir fazer isso hoje, eu vou ter que continuar com o mysql mesmo, pois amanhã tenho que estar com tudo pronto.
o software ja esta pronto, mas queria entrega-lo, no meu máximo.
obg

S

amigo, pelo menos no netbeans, ao gerar o executavel(.jar) do projeto é criado um diretório na pasta do projeto com a pasta /dist. nesse diretório contém o executavel e a pasta lib.

e quando fiz isso os meus arquivos do hsqldb não foram automaticamente para a pasta lib, ou seja, tive que colocar manualmente. e obviamente não pude mudar o executavel de diretorio.

o certo a se fazer é extrair a pasta dist(renomeando-a) em C:/Arquivos de Programas, e criar um atalho no desktop para o executavel.

lembre-se de colocar manualmente os arquivos do banco proximo ao executavel.

att,

Z

Após pesquisar muito consegui fazer a instalação e outro pc, UFFA DEPOIS DE MUITO TRAMPO DESCOBRI O VERDADEIRO POBLEMA.
Uso o inno setup, e ele oferece a opção do usuário escolher em qual diretório quer instalar, e normalmente acaba sendo no disco C
está ai o problema, quando instalado no disco C, não consigo fazer Acessar nen modificar o banco, creio que seja problema com permissão.
como conseguir essa permissão ?
se alguém soube e puder me ajudar, ficaria muito grato, pois resolvendo isso creio que vou conseguir o que eu tanto pretendo.

S

ou é permissão ou o caminho não está sendo localizado pelo outro computador…

eu ainda acho que tem algo ai onde o sistema NÃO está encontrando o caminho pro banco.

S

digo isso pois acabei de fazer um deste com este sistema aqui gerando um instalador e deu tudo certo mesmo tendo optado por instalar tudo em C:

Criado 18 de novembro de 2012
Ultima resposta 21 de nov. de 2012
Respostas 23
Participantes 4