HyperSQL Database Engine, vulgo HSQLDB!

O HSQLDB é uma ótima opção de banco de dados para utilização nos nossos estudos, extremamente simples e prático. Vocês não vão acreditar no quão fácil é sua instalação, criação, manutenção e utilização.

Primeiro vamos baixá-lo:

http://sourceforge.net/projects/hsqldb/files/hsqldb/hsqldb_2_3/

Descompactá-lo:

sudo unzip hsqldb-2.3.3

No meu caso irei copiá-lo para um lugar mais conveniente que a pasta Download do meu Ubuntu:

sudo cp -Rap hsqldb-2.3.3 /opt/desenvolvimento

Podemos acessar o diretório e iniciar uma interface swing de gerenciamento:

cd /opt/desenvolvimento/hsqldb-2.3.3/hsqldb

 java -cp ./lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

Você deverá ver algo parecido com isso:

hsql

Você poderá utilizar essa interface para criar o banco, as tabelas registros e etc.

A melhor parte vem agora. Nós não precisamos de nada disso.  Nós faremos tudo no braço, Roots.

Feche essa tela. Não esta, senão não vai mais conseguir ler o post, feche a tela swing do HSQL(dãããã). E abra o eclipse:

cd /opt/desenvolvento/eclipse/

./eclipse

Agora seguiremos a receitinha de bolo. Crie um projeto java no eclipse. Crie um pacote, para armazenamento da classe. Crie uma classe e coloque o código abaixo no método main.

public static void main(String[] args) throws SQLException {
    Connection con = DriverManager.getConnection("jdbc:hsqldb:file:/home/marcelo/desenvolvimento/database/marceloDB;ifexists=false", "SA", "");
}

Vá no menu do eclipse Run As-> Java Application e:

Oooops, não funcionou?!? Claro!!! tem que adicionar o jar do hsqldb, no build path do projeto. Não sabe fazer isso? Tá bom, eu ajudo.

Clique com o botão direito no projeto, e vá em properties:

propriedadesProjeto

Na aba Libraries, clique em Add External JARS…

E selecione o hsqldb.jar, que no meu caso está em /opt/desenvolvimento/hsqldb-2.3.3/hsqldb/lib

selecionaJAR

Putz, se precisou de ajuda para isso, lembra de clicar no OK depois de selecionar o arquivo. Haja paciência!

De novo! Vá no menu do eclipse Run As-> Java Application e:

Nada nessa mão,  nada nessa outra e Tchanram!!!

Um banco de dados quentinho e fresquinho foi criado em /home/marcelo/desenvolvimento/database/,  com o nome de marceloDB, caso já não existisse, pois nesse caso conectaríamos nele sem criar, e com a senha do “SA”, sendo “”.

A frase acima, ficou mais complicada e maior, do que o código em si.

Vamos dar uma olhada como ficaram os arquivos em disco:

cd /home/marcelo/desenvolvimento/database/

ls

E deveremos ver isso:

marceloDB.log  marceloDB.properties  marceloDB.script  marceloDB.script~  marceloDB.tmp

O arquivo mais importante é o marceloDB.script, que contém as informações do banco de dados, tabelas e os registros. Você pode editá-lo manualmente e ele será alterado sempre que executar comandos pela conexão feita lá do java.

Veja abaixo um pequeno exemplo, para aqueles que precisam ver para crer(São Tomé). Crie a classe abaixo e a execute algumas vezes. Veja o resultado na tela. Depois abra o arquivo marceloDB.script e veja como ele ficou agora!

public class ClasseBestaDeDemonstracao {

    public ClasseBestaDeDemonstracao() throws SQLException {

    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(
                "jdbc:hsqldb:file:/home/marcelo/desenvolvimento/database/marceloDB;ifexists=true", "SA", "");
    }

    public static void main(String[] args) throws SQLException {
        ClasseBestaDeDemonstracao demo = new ClasseBestaDeDemonstracao();
        demo.criaTabelaCliente();
        demo.criaCliente();
        demo.listaCliente();
    }

    public void listaCliente() throws SQLException {
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            con = getConnection();
            stmt = con.prepareStatement("select * from CLIENTES");
            rs = stmt.executeQuery();

            while (rs.next()) {
                System.out.println(rs.getInt(1) + " - " + rs.getString(2));
            }
        } finally {
            rs.close();
            stmt.close();
            con.close();
        }
    }

    public void criaCliente() throws SQLException {
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = getConnection();
            stmt = con.prepareStatement(
                    "insert into CLIENTES(nome, sexo, data_nascimento) values('Marcelo', 'M', sysdate)");
            stmt.execute();
        } finally {
            stmt.execute();
            con.close();
        }
    }

    public void criaTabelaCliente() throws SQLException {
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = getConnection();
            stmt = con.prepareStatement(
                    "CREATE MEMORY TABLE PUBLIC.CLIENTES(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,NOME VARCHAR(255),DATA_NASCIMENTO TIMESTAMP,SEXO CHARACTER(1))");
            stmt.execute();
        } catch (Exception e) {
            // pssss, exceção silenciosa, não contém para ninguém
        } finally {
            stmt.close();
            con.close();
        }
    }

O ministério da programação certa adverte, fazer conexão com banco de dados sem um gerenciador(J2EE, Spring), pool de conexões, DAO e etc, pode fazer mal ao seu software.
Vou introduzindo os assuntos bem devagar(hum, ulalá), e nos próximos episódios irei melhorando o código, por enquanto, deixarei assim, afinal tem gente que nem conseguiu instalar o java no ubuntu ainda(kkkkkk)!

Para terminal abra o arquivo marceloDB.script e veja com seus próprios olhos, que um dia a terra à de comer, os scripts gerados. O meu ficou assim(somente as últimas linhas):

CREATE MEMORY TABLE PUBLIC.CLIENTES(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,NOME VARCHAR(255),DATA_NASCIMENTO TIMESTAMP,SEXO CHARACTER(1))
ALTER TABLE PUBLIC.CLIENTES ALTER COLUMN ID RESTART WITH 3
ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1
SET DATABASE DEFAULT INITIAL SCHEMA PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC
GRANT DBA TO SA
SET SCHEMA SYSTEM_LOBS
INSERT INTO BLOCKS VALUES(0,2147483647,0)
SET SCHEMA PUBLIC
INSERT INTO CLIENTES VALUES(0,'Marcelo','2015-07-15 23:03:47.000000','M')
INSERT INTO CLIENTES VALUES(1,'Marcelo','2015-07-15 23:03:48.000000','M')
INSERT INTO CLIENTES VALUES(2,'Marcelo','2015-07-15 23:03:49.000000','M')

Quer uma explicação de HSQLDB baseada em Windows em uma linguagem mais formal, segue então http://www.devmedia.com.br/hypersql-database-com-hibernate-veja-como-utilizar/30280

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s