17 de fev. de 2016

Um CRUD com JavaFX usando banco de dados

Devido ao sucesso da postagem anterior Um CRUD com JavaFX, resolvi estender a mesma para falar sobre o acesso a um banco de dados MySQL utilizando a mesma estrutura do artigo anterior.

Acessando banco de dados com Java


Esse é talvez um dos assuntos mais buscados por quem está aprendendo Java. Há muitas referências a isso na internet, inclusive uma série de artigos que o criado desse blog  escreveu há mais de 5 anos atrás para o JavaFree, veja: Acessando dados com Java: 1º parte - Simples Dao - Acessando Dados com Java: Parte 2 - Prevendo problemas - Acessando Dados com Java: Parte 3 - Hibernate Annotations

Preparando o banco

O primeiro passo nosso é garantir que você tenha o MySQL instalado(que depende do sistema operacional sendo utilizado, Linux ou outros) e uma vez feito isso, entre no MySQL e então seguir alguns passos. Para esse artigo foi criado o seguinte:


  • Usuário contas_app com senha aprendajavafx;

CREATE USER 'contas_app'@'localhost' IDENTIFIED BY 'aprendajavafx';


  •  Banco de dados contas crud-contas; 

CREATE DATABASE `crud-contas`  DEFAULT CHARACTER SET utf8  DEFAULT COLLATE utf8_general_ci


  • Garanta os privilégios do usuário contas_app para o banco crud-contas

mysql> use crud-contas
Database changed
mysql> GRANT ALL PRIVILEGES ON * . * TO 'contas_app'@'localhost';


  • Tabela Contas com os campos que precisamos

create table contas(  
   id int auto_increment, 
   concessionaria varchar(30) not null,  
   descricao varchar(1000) not null,  
   data_vencimento date not null,
   primary key(id)         
); 

Notem que o ID é auto_increment, ou seja, o MySQL vai dar o ID para nós. Se inserirmos alguns valores de teste, podemos notar que o ID já foi preenchido:

Criando uma classe para acesso ao banco de dados

Conforme falamos no artigo anterior, para trocar onde os dados serão armazenados nós iremos criar uma implementação de ContasService e trocar o tipo retornado no método getNewInstance

Para falarmos com o nosso banco de dados MySQL, precisamos ter o Driver JDBC no classpath da aplicação, pois é ele quem possibilita a comunicação de uma aplicação Java com o banco. Por isso, baixe o driver JDBC do MySQL e coloque no classpath da aplicação.

A implementação do banco de dados simplesmente envia comandos SQL para o MySQL invés de abrir e manipular arquivos, assim temos que:

* Salvar significa realizar um INSERT com os dados da conta passada;
* Buscar é trazer dados usando SELECT e transformar em uma lista de contas;
* Apagar é realizar um DELETE;
* Por fim atualizar é a realização de um UPDATE.

Claro que tudo pode ser facilitado usando um framework que faz o mapeamento de objetos para o modelo relacional de banco de dados, como o Hibernate, mas por hoje vamos ficar no básico! Finalmente, veja como ficou nossa classe ContasDBService (lembre-se que todo o código pode ser encontrado no github):


6 comentários:

  1. Boa tarde, tenho muito interesse em aprender javafx conheço um pouco sobre java e em uma googlada encontrei este blog, por onde devo começar? Forte abraço!

    ResponderExcluir
    Respostas
    1. Olá! Comece por aqui -> http://aprendendo-javafx.blogspot.com.br/p/o-que-e-javafx.html

      Bons Estudos :)

      Excluir
  2. Boa noite, estou com uma dúvida, realizei o CRUD utilizando o banco de dados, como eu incluo a ação do botão salvar sendo que utilizo javafx FXML, utilizo o SceneBuilder para criar minhas telas, nessa parte do código não ficou claro como realizo essa operação, caso possa me ajudar, serei grato.
    Abraços.

    ResponderExcluir
  3. Olá! A ação do botão salvar está aqui:

    Button fx:id="btnSalvar" mnemonicParsing="false" onAction="#salvar" text="Salvar"

    ResponderExcluir
  4. Bom dia,
    Estou com o seguinte problema em relação a data, no meu banco de dados MySql, a data está correta, quando exibo as informações em uma TableView, a data está vindo sempre com 1 dia a menos. Por exemplo: no banco esta: 12/09/2018, na TableView aparece 11/09/2018, o que pode estar ocasionando esse erro?
    Estou usando o Eclipse Oxygen, desde já agradeço

    ResponderExcluir