Métodos da biblioteca - raialmeida/mindqa-db-commons GitHub Wiki

Métodos da biblioteca

Use os métodos estáticos de DatabaseService para a conexão padrão. Para escolher outra conexão ou base, chame connection(nome) ou database(nome); o DatabaseClient retornado oferece os mesmos métodos select e execute. Importe as classes de io.mindqa.database. O tipo de banco e as credenciais vêm da configuração.

Método Função Retorno
select(sql, params...) Consulta dados. List<Map<String, Object>>
execute(sql, params...) Executa INSERT, UPDATE ou DELETE. Quantidade de linhas afetadas (int)
connection(nome) Seleciona uma conexão configurada; disponível em DatabaseService. DatabaseClient
database(nome) Seleciona outra base; disponível em DatabaseService e DatabaseClient. Novo DatabaseClient
clearConfigurationCache() Descarta o cache de configuração; disponível em DatabaseService. void
closePools() Fecha os pools; disponível em DatabaseService. void

DatabaseService.database(nome) usa a conexão padrão. Após DatabaseService.connection(nome), a chamada database(nome) preserva a conexão selecionada e troca apenas a base. O exemplo pressupõe as conexões e bases configuradas, com o registro cliente-1 preparado em cada destino.

import io.mindqa.database.DatabaseClient;
import io.mindqa.database.DatabaseService;

import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;

String id = "cliente-1";
List<Map<String, Object>> clientes = DatabaseService.select(
        "SELECT nome FROM clientes WHERE id = ?", id);
assertEquals(1, clientes.size());

DatabaseClient financeiro = DatabaseService.connection("financeiro");
List<Map<String, Object>> clientesFinanceiro = financeiro.select(
        "SELECT nome FROM clientes WHERE id = ?", id);
assertEquals(1, clientesFinanceiro.size());

List<Map<String, Object>> auditoria = financeiro.database("qa_auditoria")
        .select("SELECT nome FROM clientes WHERE id = ?", id);
assertEquals(1, auditoria.size());

List<Map<String, Object>> clientesEmOutraBase = DatabaseService.database("qa_clientes")
        .select("SELECT nome FROM clientes WHERE id = ?", id);
assertEquals(1, clientesEmOutraBase.size());

int removidos = financeiro.database("qa_auditoria")
        .execute("DELETE FROM clientes WHERE id = ?", id);
assertEquals(1, removidos);

connection(nome) aceita letras ASCII e números, começa com uma letra e ignora maiúsculas e espaços nas extremidades. O nome precisa corresponder a uma conexão configurada; o tipo do banco não é um parâmetro da query. Os clientes retornados são imutáveis e podem ser reutilizados. No Oracle, o nome da base é um service name. Em qualquer motor, database(null) ou um nome em branco mantém a base definida na configuração.

Passe os valores na ordem dos placeholders ?. Para um único valor SQL NULL, use (Object) null. Placeholders substituem valores, não nomes de tabelas, colunas ou bases. O SQL deve respeitar o dialeto do banco escolhido.

select devolve uma lista vazia quando não há resultados. Cada mapa representa uma linha, indexada pelo nome ou alias das colunas, com os tipos retornados pelo JDBC. execute devolve a quantidade de linhas afetadas, não um ID gerado.

Como a biblioteca requer Java 17, variáveis locais também podem usar var:

var clientes = DatabaseService.select(
        "SELECT nome, email FROM clientes WHERE id = ?", id);

Os exemplos usam List<Map<String, Object>> explicitamente para deixar visível o tipo retornado por select(). var não pode ser usado em atributos, parâmetros ou retornos de métodos.

SQL nulo ou em branco, array de parâmetros nulo e nome de conexão inválido geram IllegalArgumentException. Configuração ausente ou ambígua e arquivo ilegível geram IllegalStateException. Falhas JDBC lançam DatabaseException, cuja mensagem vem do driver e cuja SQLException original fica disponível em getCause() e getSQLException().

Cada operação usa sua própria conexão em auto-commit e a fecha automaticamente; com pool habilitado, o fechamento a devolve ao pool. Não há transação compartilhada entre chamadas. Consulte Erros e solução de problemas para configurar o pool e o cache.