Entre todas as linguagens que um desenvolvedor possa utilizar, pelo menos um banco de dados é comum a todas elas: MySQL. Utilize PHP, C, Java, Python (talvez não .NET que o pessoal é meio paranoico com Microsoft), ou qualquer outra linguagem o banco de testes será um MySQL.
Então neste artigo veremos como utilizar o MySQL com o Docker (essa mesma técnica pode ser aplicada para o MariaDB ou Postgres - respeitando obviamente a porta deste último). São apenas 3 passos a realizar:
1º) Baixar imagem oficial:
$ docker pull mysql2º) Rodar o contêiner:
$ docker run --name mybanco -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql3º) Chamar o administrativo do banco:
$ docker exec -it mybanco mysql -pObviamente que não iremos parar por aqui pois não teria a menor graça. Vamos acessar o banco através de um programa Java, ainda com o administrativo aberto crie uma base de dados com o seguinte comando:
> create database teste; > use teste; > show tables;Agora precisamos de um editor para o Java, para meus testes sempre utilizo o BlueJ e o Conector JDBC do MySQL deve ser disponibilizado, para proceder isso:
- Baixar o conector JDBC do MySQL no driver oficial ou através desse link.
- Acessar no menu principal "Tools | Preferences".
- Ir para a pasta "Libraries".
- Pressionar o botão "Add" e localizar o conector baixado.
import java.sql.*;
import java.text.SimpleDateFormat;
public class Conexao {
private Connection con;
public static void main(String [] args) {
new Conexao().executar();
}
public void executar() {
try {
criar();
selecionar();
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
private void conexao() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/teste", "root", "root");
}
private void criar() throws ClassNotFoundException, SQLException {
conexao();
// Criar a tabela
Statement stm = con.createStatement();
stm.executeUpdate(
"CREATE TABLE funcionario (" +
" matricula INT NOT NULL, " +
" nome VARCHAR(50)," +
" PRIMARY KEY (matricula))");
stm.close();
// Adicionar 100 funcionarios
PreparedStatement pstm = con.prepareStatement(
"INSERT INTO funcionario (matricula, nome) VALUES (?, ?)");
int tot = 0;
for (int i = 0; i < 100; i++) {
pstm.setInt(1, i);
pstm.setString(2, "Funcionário " + i);
tot += pstm.executeUpdate();
}
System.out.println("Inseridos : " + tot);
pstm.close();
con.close();
}
private void selecionar() throws ClassNotFoundException, SQLException {
SimpleDateFormat fdt = new SimpleDateFormat("hh:mm:ss:SSSS");
conexao();
// Varrer todos os dados
Statement stm = con.createStatement();
ResultSet res = stm.executeQuery(
"SELECT nome, matricula FROM funcionario");
int x = 0;
String nome = null;
int matricula;
System.out.println("Tempo Inicial: " + fdt.format(new java.util.Date()));
while (res.next()) {
nome = res.getString(1);
matricula = res.getInt(2);
x += 1;
}
System.out.println("Tempo Final: " + fdt.format(new java.util.Date()));
System.out.println("O último que li foi " + nome);
System.out.println("Total de " + x);
}
}
Na primeira parte deste programa será criada uma tabela na base teste e populada com 100 registros de funcionário, na segunda parte é realizada uma consulta para verificar a existência dos registros e o tempo de performance de leitura.Assista o vídeo para tirar quaisquer dúvida de como proceder:
Pronto o MySQL está pronto para seus testes, uma boa vantagem é que podemos criar várias instâncias (contêineres) do banco para múltiplos testes ou mesmo destruir sem deixar rastro de quaisquer dados.
Obrigado e até a próxima
Fernando Anselmo

0 comentários:
Postar um comentário