Como criar um CRUD em java?
Primeiro Passo, instalando as dependencias do sistema. (JDK,JVM,IDE)
Segundo Passo, instalando o MySql Workbench e baixando o conector do mesmo no site
do mysql.
Após fazer esses passos, podemos criar o projeto no Eclipse, ou no Intellij.
Nisso, criando o projeto, precisamos adicionar o conector do mysql no eclipse,
conforme os passos
** Eclipse **
clique com o botão direito do mouse no projeto, vá em properties, depois em
JavaBuild Path, depois clique em libraries,
clique em cima do class path e clique add external jars, selecione o arquivo
conector no seu pc, e depois clique em aplly and close
Feito isso, o conector já estara funcionando no java. Podendo então criar uma
conexão com o banco de dados.
Logo após isso vamos para o eclipse, crie um src, um novo pacote, com o nome de
entities, dentro de entities
criaremos uma nova classe com o nome de Product, ou Produto, dentro de Produto
iremos criar os atributos, contrutores
e métodos acessores para podermos utiliza-lós em outros pacotes, lembrando que por
ser uma linguagem fortemente tipada e orientada a
objetos, precisamos utilizar o encapsulamento, para deixarmos nosso sistema mais
seguro.
iremos utilizar os atributos como private e os mesmos serão estes: id, nome, preco,
quantidade e descricao
Depois, iremos gerar os contrutores e os metodos acessores(getters and setters).
Pelo Eclipse podemos clicar com o botão direto do mouse
na parte de edição da classe e clicar em source e depois ele mostrara todas as
janelas que o eclipse cria automaticamente,
como contructor, generate getters and setters e por ai, no momento utilizaremos os
get e set, e o contrutor vazio e com atributos.
Após iremos criar outro pacote, com o nome de model, e 2 classes, ConnectionModule
e ProductModel(dentro dela iremos criar os metodos que realizaram o CRUD no banco
de dados)
Dentro da classe de ConnectionModule iremos criar o seguinte método
public static Connection conect() {
Connection con;
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/nome do seu banco";
String user = "root(usuario padrão do mysql)";
String password = "senha do seu banco";
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
return con;
} catch (ClassNotFoundException | SQLException e) {
System.out.println(e);
return null;
}
}
este é o método responsável por criar a conexão com o banco de dados da aplicação.
Após isso vamos para a classe ProductModel.
Em ProductModel iremos criar nosso primeiro método. conforme abaixo.
public List<Product> findAll(){
try {
List<Product> listaProdutos = new ArrayList<>();
PreparedStatement ps =
ConnectionModule.conect().prepareStatement(
"select * from product");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
Product p = new Product();
p.setDescricao(rs.getString("descrição"));
p.setId(rs.getInt("id"));
p.setNome(rs.getString("nome"));
p.setPreco(rs.getDouble("preço"));
p.setQuantidade(rs.getInt("quantidade"));
}
return listaProdutos;
} catch (Exception e) {
return null;
}
}
este é o método responsável por fazer nosso read, no banco de dados, ele que irá
trazer as informações no banco de dados
Agora criaremos nosso método que fará a criação do novo produto no banco de dados.
public boolean create(Product product) {
try {
PreparedStatement ps =
ConnectionModule.conect().prepareStatement(
"insert into product values(?,?,?,?,?)");
ps.setString(1, product.getNome());
ps.setDouble(2, product.getPreco());
ps.setInt(3, product.getQuantidade());
ps.setString(4, product.getDescricao());
return ps.executeUpdate() > 0;
} catch (Exception e) {
return false;
}
}
Tome muito cuidado para que na hora de fazer a inserção das informações e setar no
java, não inserir o id, pois o mesmo
ele já autoincrementado, então gerará um erro em seu banco se você tentar fazer
isso, no momento do create, não utilizamos o Id.
Após fazermos o método de criação iremos fazer o método de edição, que é bem
similar ao método de criação.
public boolean edit(Product product) {
try {
PreparedStatement ps =
ConnectionModule.conect().prepareStatement(
"update product set nome=?, preco=?, quantidade=?,
descricao=? where id =?");
ps.setString(1, product.getNome());
ps.setDouble(2, product.getPreco());
ps.setInt(3, product.getQuantidade());
ps.setString(4, product.getDescricao());
ps.setInt(5, product.getId());
return ps.executeUpdate() > 0;
} catch (Exception e) {
return false;
}
}
porém o que muda, é que precisamos colocar a instrução de alteração no banco de
dados.
E logo em seguida, como precisamos puxar o id do produto tambem, preciso inserir o
parametro do PreparedStatement
com o setInt para o Id, igual fizemos nos metódos acima para nome, preco,
quantitade e descricao.
E por ultimo iremos realizar o método mais facil. O delete.
public boolean delete(Product product) {
try {
PreparedStatement ps =
ConnectionModule.conect().prepareStatement(
"delete from product where id =?");
ps.setInt(1, product.getId());
return ps.executeUpdate() > 0;
} catch (Exception e) {
return false;
}
}
que nada mais é do que inserir o parametro do getId no bloco try e inserir a função
de exclusão do banco de dados.
Após finalizarmos todos os nossos métodos da classe ProductModel, criaremos outro
pacote. com o nome de "gui"
aqui teremos os documentos e arquivos que serão utilizados para a criação de nossa
janela de aplicação com o swing do java.
Após a criação do nosso novo pacote, clique com o botaão direto no pacote e clique
em new, other e selecione em swt application window
clique em next e de um nome para a tela.
Logo após criarmos, entraremos no modo de design da tela, e então criaremos a tela,
não muito grande
e adicionaremos uma table, ou tabela, e nesta tabela iremos inserir 4
TableColumn's, com os nomes da esquerda pra direita.
de id, nome, preço e quantidade.
Neste meio tempo, vamos voltar na parte do código da janela gráfica, acima da
anotação que informa que o método abaixo
abre a janela do frame, vamos criar um método com o nome de
preencherDados(***Explicar o método***)
De novo na janela de edição adicionamermos dentro da tabela de coluna um novo
TableItem, e voltaremos ao codigo para fazer a identação da propriedade.
na identação chamaremos o TableItem tableItem com a visualização privada, e
excluiremos a parte TableItem no linha códigos mais inferior da nossa classe.
Deste modo. tableItem = new TableItem(table, SWT.NONE);
mais uma vez de volta ao codigo iremos clicar no tableitem e no text do mesmo,
iremos clicar nos 3 pontinhos
e digitar 'a' e dar ok. Voltaremos ao código para podermos popular o método
preencher dados com o nosso select do banco de dados.
O 'a' serve para que possamos pegar a propriedade do text, para podermos inserir os
valores no método.
No nosso método preencherDados iremos realizar o seguinte processo.
private void preencherDados() {
ProductModel pm = new ProductModel();
for(Product p : pm.findAll())
tableItem.setText(new String[] {String.valueOf(p.getId()),
p.getNome(), String.valueOf(p.getPreco()),
String.valueOf(p.getQuantidade())});
}
após terminarmos o método, iremos adicionar no método que abre a janela apaixo do
método que cria os contents.
Agora voltaremos e terminaremos nosso grid da janela
Iremos add um label para o Id, e um text para o Id tambem, e repetir o processo
para todos os campos e setar as propriedades deles no nosso projeto.
exemplo, por boas práticas, precisamos colocar sempre o nome da variavel dos
componentes como. ex: button, btnSalvar, ou txtNome e por assim vai...
Adicionaremos tambem um botão com o nome da variavel de salvar. Dando duplo click
no botao, será redirecionado ao código do botão onde faremos uma nova instancia de
Product,
Dentro de widgetSelected, faremos a instancia.
Ficará desta forma
@Override
public void widgetSelected(SelectionEvent e) {
Product p = new Product();
p.setDescricao(txtDescricao.getText());
p.setNome(txtNome.getText());
p.setPreco(Double.parseDouble(txtPreco.getText()));
p.setQuantidade(Integer.parseInt(txtQuantidade.getText()));
if(pm.create(p)) {
JOptionPane.showMessageDialog(null, "Novo produto
adicionado com sucesso!");
preencherDados();
} else JOptionPane.showMessageDialog(null, "Falha ao tentar
adicionar novo produto!");
}
});
btnSalvar.setBounds(101, 292, 75, 25);
btnSalvar.setText("Salvar");
}
agora na tela de edição na nossa tabela, clique com o botão direito e vá em add
event handler, select, widgetSelected.
No nosso handler iremos fazer a seguinte população do método
tableProduct.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem[] selection = tableProduct.getSelection();
int id = Integer.parseInt(selection[0].getText());
Product p = pm.find(id);
txtDescricao.setText(p.getDescricao());
IdTxt.setText(String.valueOf(p.getId()));
txtNome.setText(p.getNome());
txtPreco.setText(String.valueOf(p.getPreco()));
txtQuantidade.setText(String.valueOf(p.getQuantidade()));
}
});
Após terminas o nosso novo evento, iremos criar mais um botão em nossa aplicação,
dessa vez o botão de deletar.
Novamente clicando 2x no botão, para irmos até código dele, vamos fazer a
implementação do código.
public void widgetSelected(SelectionEvent e) {
int result = JOptionPane.showConfirmDialog
(null, "Tem certeza que quer excluir o produto?",
"Confirmar", JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.YES_OPTION) {
TableItem[] selection = tableProduct.getSelection();
int id = Integer.parseInt(selection[0].getText());
Product p = pm.find(id);
pm.delete(p);
preencherDados();
}
}
O método do botão ficara mais ou menos desse jeito, conforme mostrado acima,
criando uma variavel do tipo inteiro para que possa
receber o resultado da confirmação para que possamos realmente excluir o produto.
Por fim, iremos criar o nosso ultimo componente para que possamos fazer a alteração
do produto, o nosso botão de update!
fazendo o mesmo processo como no botão de deletar, vamos dar um duplo click no
nosso botão de alteração e ir até o código, no código iremos
implementar o método conforme o mostrado abaixo.
@Override
public void widgetSelected(SelectionEvent e) {
Product p = new Product();
p.setId(Integer.parseInt(IdTxt.getText()));
p.setDescricao(txtDescricao.getText());
p.setNome(txtNome.getText());
p.setPreco(Double.parseDouble(txtPreco.getText()));
p.setQuantidade(Integer.parseInt(txtQuantidade.getText()));
if(pm.create(p)) {
JOptionPane.showMessageDialog
(null, "Alteração do produto realizada com
sucesso!");
preencherDados();
} else JOptionPane.showMessageDialog
(null, "Falha ao tentar alterar o produto!");
}
E por fim rodar o projeto.
Banco de dados, Produtos tabela product
id int(25) not null, auto increment
nome varchar(250)
preco decimal(10,0)
quantidade int(11)
descricao text.