Batch update: Como fazer atualização em lote em Java: Read More »
The post Batch update: Como fazer atualização em lote em Java: appeared first on Aprenda Java.
]]> Olá Amigos, hoje iremos mostrar como podemos fazer atualização em Lote no Java o chamado batch update. Para isso precisaremos criar uma massa de teste com 10000 registros. Em seguida será feita uma inserção via JDBC utilizando Insert normalmente e outra vez utilizando a abordagem batch update. Veja a seguir os resultados que tivemos batch update X Insert simples.
CREATE TABLE tbaluno (
matricula INT NOT NULL ,
nome VARCHAR(45) NULL ,
telefone VARCHAR(45) NULL ,
email VARCHAR(45) NULL ,
datacadastro DATETIME NULL );
Atenção: não foi criada a chave primária para evitar conflito na geração das chaves pelo programa!
Inicialmente devemos criar a classe Aluno conforme código abaixo.
Ela servirá como modelo de negócio para atualizarmos a tabela no banco de dados.
package br.com.feltex.jdbc;
import java.io.Serializable;
import java.util.Date;
public class Aluno implements Serializable {
private static final long serialVersionUID = -309513637403441918L;
private Long matricula;
private String nome;
private String telefone;
private String email;
private String endereco;
private Date dataCadastro;
public Aluno() {
}
public Aluno(Long matricula) {
super();
this.matricula = matricula;
}
public Aluno(Long matricula, String nome) {
super();
this.matricula = matricula;
this.nome = nome;
}
public Date getDataCadastro() {
return dataCadastro;
}
public String getEmail() {
return email;
}
public String getEndereco() {
return endereco;
}
public Long getMatricula() {
return matricula;
}
public String getNome() {
return nome;
}
public String getTelefone() {
return telefone;
}
public void setDataCadastro(Date dataCadastro) {
this.dataCadastro = dataCadastro;
}
public void setEmail(String email) {
this.email = email;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public void setMatricula(Long matricula) {
this.matricula = matricula;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
@Override
public String toString() {
return "Aluno [matricula=" + matricula + ", nome=" + nome
+ ", telefone=" + telefone + ", email=" + email
+ ", dataCadastro=" + dataCadastro + "]";
}
}
A seguir teremos a classe principal que executará as ações no banco de dados e fará a comparação entre os tempos gastos entre as operações Uma a uma e tipo de atualização via lote.
Temos o método “gerarMassa” que criará uma coleção de alunos que será inserido no Banco de dados. O método “executarBatch” faz as inserções dos dados em blocos. Temos também o “executarUnitario” que faz as inserções item por item. Há também o método “getConexao” que recupera um conexão com o banco de Dados. Por último, mas não menos importante, há o método “main” que inicia a aplicação.
package br.com.feltex.jdbc.avancado;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import br.com.feltex.jdbc.Aluno;
public class Transacao {
public static void gerarMassa(){
for (int i = 0; i < 10000; i++) {
Aluno aluno = new Aluno();
aluno.setMatricula(Long.valueOf(i));
aluno.setNome("Jose" + i);
aluno.setTelefone("22352-" + i);
aluno.setEmail("Jose" + i + "@feltex.com.br");
aluno.setEndereco("RUA a Numero: " + i);
aluno.setDataCadastro(new Date());
listaAlunos.add(aluno);
}
}
static List listaAlunos = new ArrayList<>();
public static void executarBatch() {
Long inicio = System.currentTimeMillis();
Long fim = 0L;
Connection conexao = null;
try {
conexao = getConexao();
conexao.setAutoCommit(false);
PreparedStatement pstm = conexao
.prepareStatement("Insert into tbaluno (matricula, nome," + " telefone, email, datacadastro) values (?,?,?,?,?)");
int contador = 0;
for (Aluno aluno : listaAlunos) {
contador++;
pstm.setLong(1, aluno.getMatricula());
pstm.setString(2, aluno.getNome());
pstm.setString(3, aluno.getTelefone());
pstm.setString(4, aluno.getEmail());
pstm.setDate(5, new java.sql.Date(aluno.getDataCadastro()
.getTime()));
pstm.addBatch();
}
if ((contador % 100) == 0) {
pstm.executeBatch();
}
conexao.commit();
pstm.close();
conexao.close();
fim = System.currentTimeMillis();
} catch (Exception e) {
try {
conexao.rollback();
} catch (Exception e2) {
e.printStackTrace();
}
e.printStackTrace();
}
System.out.println("executarBatch Tempo total[ms]: "
+ (fim - inicio));
}
public static void executarUnitario() {
Long inicio = System.currentTimeMillis();
Long fim = 0L;
Connection conexao = null;
try {
conexao = getConexao();
PreparedStatement pstm = conexao
.prepareStatement("Insert into tbaluno (matricula, nome,"
+ " telefone, email, datacadastro) values (?,?,?,?,?)");
for (Aluno aluno : listaAlunos) {
pstm.setLong(1, aluno.getMatricula());
pstm.setString(2, aluno.getNome());
pstm.setString(3, aluno.getTelefone());
pstm.setString(4, aluno.getEmail());
pstm.setDate(5, new java.sql.Date(aluno.getDataCadastro()
.getTime()));
pstm.execute();
}
pstm.close();
conexao.close();
fim = System.currentTimeMillis();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("executarUnitario Tempo total [ms]: "
+ (fim - inicio));
}
/**
*
* @return
*/
public static Connection getConexao() {
//TODO Remover este código desta classe
Connection conexao = null;
String usuario = "root";
String senha = "root";
String nomeBancoDados = "bdacademicnet";
try {
conexao = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/" + nomeBancoDados, usuario,
senha);
} catch (Exception e) {
e.printStackTrace();
}
return conexao;
}
public static void main(String[] args) {
gerarMassa();
for (int i = 0; i < 10; i++) {
executarUnitario();
executarBatch();
}
}
}
A saída deve ser parecida com a imagem abaixo:
A execução desde exemplo nos mostra qual a vantagem de utilizamos de utilizar a gravação em lotes quando temos grandes volumes de dados. Observe que o resultados são bem diferentes. Quando utilizamos a gravação batch update com um volume considerável de dados temos um ganho de desempenho.
Isto é apenas o início. Aproveite para ler os links relacionados abaixo e buscar mais informações sobre o assunto.
Então é isso. Por hoje é só e vida que segue.
The post Batch update: Como fazer atualização em lote em Java: appeared first on Aprenda Java.
]]>Instalação e Configuração do Banco de Dados PostGreSQL Read More »
The post Instalação e Configuração do Banco de Dados PostGreSQL appeared first on Aprenda Java.
]]>Olá Amigos,
Hoje faremos a Instalação Configuração Banco Dados PostGreSQL.
PostgreSQL é um SGBD (Sistema gerenciador de banco de dados) open source poderoso. Tem mais de 15 anos de desenvolvimento ativo e uma arquitetura comprovadamente forte e reputação de confiabilidade, integridade de dados e correção.
Sua instalação e configuração é bem simples.
Ele funciona em todos os principais sistemas operacionais, incluindo Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) e Windows. É totalmente compatível com ACID (Atomicidade, Consistência, Isolamento e Durabilidade), tem suporte completo para chaves estrangeiras, joins, views, triggers, e procedimentos armazenados (em vários idiomas). Ele inclui vários tipos de dados INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, e TIMESTAMP. Além disso também suporta o armazenamento de grandes objetos (LOB ou CLOB) binários, incluindo imagens, sons ou vídeo. Possui interfaces de programação nativas para C/C ++, Java,.Net, Perl, Python, Ruby, Tcl, ODBC, entre outros.
Há uma documentação excelente que pode ser acessada no site neste link:aqui . Existem 2 versões, uma original criada pela equipe do projeto e outra com comentários incluídos pelos usuários.
Veja o vídeo abaixo:
The post Instalação e Configuração do Banco de Dados PostGreSQL appeared first on Aprenda Java.
]]>JDBC: Conectar com Banco de Dados PostgreSQL Read More »
The post JDBC: Conectar com Banco de Dados PostgreSQL appeared first on Aprenda Java.
]]>Olá amigos!
Hoje iremos aprender como realizar uma conexão com banco de Dados PostgreSQL.
Neste exemplo mostraremos como exibir o dicionário de dados, que é a lista de objetos de banco para o PostreSQL. Listaremos as tabelas.
package br.com.feltex.bancodados;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ConexaoPostgreSQL {
public static void main(String[] args) {
System.out.println("Inicio PostgreSQLMySQL");
try {
Connection conexao = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/BDAcademicNet",
"postgres", "teco01");
PreparedStatement pstm = conexao
.prepareStatement("SELECT tablename FROM pg_tables order by tablename");
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
System.out.println("Nome tabela: " + rs.getString("tablename"));
}
rs.close();
pstm.close();
conexao.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Fim PostgreSQLMySQL");
}
}
Abraços e bons estudos! E vida que segue!
Exemplo completo com JSF Primefaces + Hibernate + MySQL
JDBC: Conectar com Banco de Dados SQLServer
JDBC: Conectar com Banco de Dados via ODBC
JDBC: Conectar com Banco de Dados PostgreSQL
JDBC: Conectar com Banco de Dados Microsoft Access
JDBC: Aprenda a conectar com Banco de Dados MySQL
The post JDBC: Conectar com Banco de Dados PostgreSQL appeared first on Aprenda Java.
]]>