Post

Conectando bancos de dados locais - Parte I

Uma coisa que todo programador ou estudante back-end precisa ter para fazer qualquer coisa útil, é um banco de dados rodando. Afinal de contas, tudo é CRUD (polêmico) e não se faz um sem um banco de dados.

Uma coisa importante é que existem alguns passos a se configurar um banco de dados local na sua máquina para poder rodar sua aplicação e manusear dados.

Eu não vou me aprofundar aqui sobre as diferenças de SQL e NoSQL, tem bastante material por aí, senta a bunda na cadeira e vai estudar. Aqui eu vou falar sobre as diferenças de conexões, como implementar e o que precisa escrever de código. Para este post eu vou usar Java numa abordagem Vanilla, ou seja, sem framework. E para lidar com bancos de dados eu vou usar o Postgres para SQL e MongoDB para NoSQL.

Vai ser uma série de 4 posts, este primeiro vou mostrar a configuração do postgres, no segundo a criação de entidades e tabelas e suas relações, no terceiro configuro o MongoDB e no quarto foco em interação de entidades, tabelas e suas relações em um banco NoSQL.

Primeiro, para poder utilizar qualquer banco de dados, você precisa instalar e botar pra rodar na sua máquina. No Windows é bem intuitivo porque tudo é instalado via aquivo .exe. No Linux precisamos rodar alguns comandos no terminal pra poder funcionar tudo direitinho. Isso não quer dizer que o ambiente do Windows é melhor pra desenvolver, não se iluda.

Presumindo que você já tem uma jdk instalada, pelo menos da 11 pra frente, vamos configurar as coisas. No windows, só ir no site e instalar e no Linux vou mostrar um passo a passo básico aqui.

Primeiro você atualiza a lista de packages e então instala o postgres:

1
2
sudo apt update
sudo apt install postgresql postgresql-contrib

Depois você precisa iniciar o serviço:

1
sudo systemctl start postgresql

Se quiser que o postgres já inicie quando a máquina ligar:

1
sudo systemctl enable postgresql

PostgreSQL cria um user por default chamado de postgres, então mude para esse usuário:

1
sudo -i -u postgres

Acesse o CLI do PostgreSQL:

1
psql

Recomendo mudar a senha pois você vai precisar dela:

1
ALTER USER postgres PASSWORD 'nova_senha';

Saia do prompt do postgres:

1
\q

Saia do usuário do postgres:

1
exit

Pronto, você está com o postgres instalado e pronto pra usar. Para administrar o banco de dados, eu utilizo o pgAdmin4, que você pode usar tanto a aplicação web quanto a versão desktop. Eu utilizo a desktop. Segue o roteiro:

Adicione o repositório do pgAdmin:

1
2
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list'

Atualize a list de packages e instale o pgAdmin:

1
2
sudo apt update
sudo apt install pgadmin4

Na sua instalação pode querer definir se quer a versão desktop pgadmin4-desktop ou o webapp pgadmin4-web. Se preferir usar o web app, recomendo o seguinte passo:

1
sudo /usr/pgadmin4/bin/setup-web.sh

Agora vamos ao que interessa que é preparar seu banco de dados para ser utilizado. Abrindo o pgAdmin desktop, você clica com o botão direito em Server e vai Register -> Server…

Primeiro passo pgAdmin

Aí você vai dar de cara com General Tab, um menu que pede o name do server, aqui é livre, vamos supor “PostgreSQL Server” e depois você vai em Connection Tabe, coloa no host name localhost, uma vez que você vai rodar local neste caso, a porta padrão do postgres é 5432 e geralmente já vem por default, o usuário postgres que configuramos antes e a senha que você escolheu. Vai de Save e seu novo Server vai estar lá.

Depois no server que você criou, pode clicar com o botão direito para criar um database com o nome que você achar melhor. Seu banco de dados não vai ter nenhuma tabela. Então você vai em Schemas -> Tables e clica com o botão direito, lá você pode usar o menu do pgAdmin ou criar as tabelas via query do SQL selecionando Query Tool. Um exemplo de query SQL para você criar uma tabela:

1
2
3
4
5
create table tb_order_product (
    order_id int8 not null, 
    product_id int8 not null, 
    primary key (order_id, product_id)
);

Com o postgres configurado e rodando, precisamos agora criar a conexão com a aplicação. Menos palavras e mais código. Segue a implementação que usei no meu caso. Primeiro, para rodar local, você precisa de um arquivo db.properties:

1
2
3
4
dbuser=postgres
dbpassword=sua_senha
dburl=jdbc:postgresql://localhost:5432/seu_banco_de_dados
useSSL=false
  • Desativação do SSL: Quando você define useSSL=false, está explicitamente informando ao driver JDBC que ele não deve usar SSL para a conexão com o banco de dados. Isso é útil em ambientes onde a comunicação SSL não é necessária, como em ambientes de desenvolvimento local, onde a segurança da comunicação entre o aplicativo e o banco de dados pode não ser uma prioridade tão alta.

Depois, é necessário criar a classe que ativa a conexão com o banco de dados. Nesta classe eu utilizei 3 métodos: um para criar a conexão com o banco, um para encerrar a conexão e outro que utiliza a classe FileInputStream para acessar o arquivo db.properties e coletar os dados.

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
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DB {

  private static Connection conn = null;

  public static Connection getConnection() {
    if (conn == null) {
      try {
        Properties props = loadProperties();
        String url = props.getProperty("dburl");
        String user = props.getProperty("dbuser");
        String password = props.getProperty("dbpassword");
        conn = DriverManager.getConnection(url, user, password);
      } catch (SQLException e) {
        throw new DbException(e.getMessage());
      }
    }
    return conn;
  }

  public static void closeConnection() {
    if (conn != null) {
      try {
        conn.close();
      } catch (SQLException e) {
        throw new DbException(e.getMessage());
      }
    }
  }

  private static Properties loadProperties() {
    try (FileInputStream fs = new FileInputStream("db.properties")) {
      Properties props = new Properties();
      props.load(fs);
      return props;
    } catch (IOException e) {
      throw new DbException(e.getMessage());
    }
  }
}

Além disso, criei uma classe DbException que extende RuntimeException para lidar e comunicar os erros que possam acontecer na conexão:

1
2
3
4
5
6
7
public class DbException extends RuntimeException {
  private static final long serialVersionUID = 1L;

  public DbException(String msg) {
    super(msg);
  }
}

É isso, o banco está configurado para uso. No próximo post trago a implementação das entidades e tabelas e como realizar o CRUD propriamente dito.

Abraços!

Esta postagem está licenciada sob CC BY 4.0 pelo autor.

Comments powered by Disqus.