USJT – 2016 – CCO & SI – PPINT – Práticas de Programação Integrada
Professores:
Calvetti, Élcio, Fúlvio, Hamilton, Liliane e Rodrigo
Aula:
12
Assunto:
Acesso ao MySQL com Java.
Conceitos Básicos abordados pelo Professor:
- Banco de Dados MySql;
- Conexão;
- Databases;
- Tabelas;
- Dados;
-
PreparedStatement; e- Comandos Sql.
Exemplo:
Execute as atividades descritas abaixo, na ordem que elas se apresentam:
1. Monte as tabelas da aula anterior (database “tutorial” e tabelas “cliente” e "pedido").
Para facilitar a recriação, se for preciso, utilize-se do arquivo “criar_tabelas.sql”. Por exemplo, execute-o de dentro do MySQL ou abra-o com o aplicativo WordPad e copie e cole os comandos para o MySQL;
2. Acrescente ao CLASSPATH da aplicação o Driver JDBC para o MySQL, através do pacote "mysql-connector-java-5.1.13-bin.jar" ou superior, da seguinte forma:
2.1. Na IDE JGrasp escolha:
Settings -> PATH/CLASSPATH -> WORKSPACE -> CLASSPATHS -> New;
2.2. Em “Path or Jar File” aponte e escolha o arquivo do pacote JAR fornecido ("mysql-connector-java-5.1.13-bin.jar"), ou superior.
3. Acerte a String de conexão (usuário e senha) na classe "AcessoBD.java". Exemplo: usuário "root" e senha "senha";
4. Teste o programa fornecido, executando a classe “Teste.java”. Note que esse aplicativo foi construído com a separação entre acesso e aplicação.
A execução da classe “Teste.java” não apresentará mensagem alguma no console. Ao término, o aluno deverá se conectar no MySQL e listar o conteúdo das tabelas “cliente” e “pedido”, através dos comandos “SELECT * FROM cliente;” e “SELECT * FROM pedido;”, respectivamente, para verificar se obteve sucesso no comando solicitado;
5. Verifique o papel das classes fornecidas:
5.1. “Teste.java”: Cria a Tabela, Insere e Exclui um Cliente no respectivo Banco de Dados – BD;
5.2. “AcessoBD.java”: Prepara o acesso ao Banco de Dados MySQL;
5.3. “Cliente.java” e “Pedido.java”: Classes que implementam um modelo Cliente -> Pedido (utilizando-se de ArrayList).
Verifique que nestas classes, além dos métodos get...() e set...(), há comandos de INSERT, SELECT, DELETE etc.
Para eles, usam-se os “PreparedStatement” SqlInsert, SqlDelete etc.
Note que os mesmos são Strings, criadas uma a uma, para representar e realizar os respectivos comandos no BD.
6. Constate que, em geral, as classes de negócio (no caso, a "Teste.java") devem tratar de objetos e não se preocupar com os aspectos físicos do armazenamento e/ou recuperação dos dados.
Atividade Prática:
1- Altere o código fornecido para construir um aplicativo, capaz de mostrar os dados do cliente e uma
confirmação de exclusão antes de realizar a respectiva operação (delete).
2- Para a atividade prática anterior (1), crie uma interface gráfica melhorada, utilizando-se dos recursos
de Menus e Itens de Menus, já vistos nas aulas de laboratório.
Anexos:
Classe “Teste.java” import java.sql.SQLException; import java.sql.Connection; import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat;public class Teste {
/**
* Programa principal */
public static void main(String[] args) {
Connection conn = null;
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); Cliente cl; Pedido pd; try {
// obtem conexao com o banco AcessoBD bd = new AcessoBD(); conn = bd.obtemConexao();
// *** IMPORTANTE ***: Força o uso de transação. conn.setAutoCommit(false);
// *** Inclusao do Primeiro Cliente ***
cl = new Cliente(1001, "Zé das Couves", "1127991999");
pd = new Pedido(10001, (Date)formatter.parse("29/01/2009"), 150.00); cl.adicionaPedido(pd);
pd = new Pedido(10002, (Date)formatter.parse("15/03/2009"), 100.00); cl.adicionaPedido(pd);
pd = new Pedido(10003, (Date)formatter.parse("18/06/2009"), 75.00); cl.adicionaPedido(pd);
cl.incluir(conn);
// *** Inclusao do Segundo Cliente *** cl = new Cliente();
cl.setIdCliente(1002); cl.setNome("João das Couves"); cl.setFone("1160606161");
pd = new Pedido(10004, (Date)formatter.parse("01/03/2009"), 250.00); cl.adicionaPedido(pd);
pd = new Pedido(10005, (Date)formatter.parse("15/08/2009"), 400.00); cl.adicionaPedido(pd);
cl.incluir(conn);
// *** Inclusao do Terceiro Cliente ***
cl = new Cliente(1003, "Maria das Couves", "1121212121");
pd = new Pedido(10006, (Date)formatter.parse("20/09/2009"), 650.00); cl.adicionaPedido(pd);
// *** IMPORTANTE ***: Efetiva inclusões conn.commit();
// *** Carregar o cliente 1002 a partir do bd *** cl = new Cliente(1002);
cl.carregar(conn);
// *** Excluir o cliente 1002 (carregado em cl) do bd cl.excluir(conn);
// *** IMPORTANTE ***: Efetiva exclusão conn.commit(); } catch (Exception e) { e.printStackTrace(); if (conn != null) { try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } finally { if (conn != null) { try { conn.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } } } Classe “AcessoBD.java” import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /**
* Classe responsável pela conexão com banco de dados MySQL */
public class AcessoBD { // --- // Carrega driver JDBC // static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) {
throw new RuntimeException(e); }
// --- // Obtém conexão com o banco de dados
public Connection obtemConexao() throws SQLException { return DriverManager.getConnection ( "jdbc:mysql://localhost/tutorial?user=root&password=senha" ); } } Classe “Cliente.java” import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.ResultSet; import java.util.ArrayList;
public class Cliente {
private int idCliente; private String nome; private String fone;
private ArrayList<Pedido> listaDePedidos;
public Cliente() {
listaDePedidos = new ArrayList<Pedido>(); }
public Cliente(int idCliente) {
this.idCliente = idCliente;
listaDePedidos = new ArrayList<Pedido>(); }
public Cliente(int idCliente, String nome, String fone) {
this.idCliente = idCliente; this.nome = nome;
this.fone = fone;
listaDePedidos = new ArrayList<Pedido>(); }
public int getIdCliente() {
return idCliente; }
public void setIdCliente (int idCliente) {
this.idCliente = idCliente; }
public String getNome() {
return nome; }
public void setNome(String nome) {
this.nome = nome; }
public String getFone() {
return fone; }
public void setFone(String fone) {
this.fone = fone; }
public ArrayList<Pedido> getListaDePedidos() {
return listaDePedidos; }
public void setListaDePedidos(ArrayList<Pedido> listaDePedidos) {
this.listaDePedidos = listaDePedidos; }
public void adicionaPedido(Pedido novoPedido) { listaDePedidos.add(novoPedido); } /** * Inclusao de clientes */
public void incluir(Connection conn) {
String sqlInsert = "INSERT INTO cliente(id, nome, fone) VALUES (?, ?, ?)";
PreparedStatement stm = null; try
{ //
// Inclusao dos dados na tabela CLIENTE // stm = conn.prepareStatement(sqlInsert); stm.setInt(1, getIdCliente()); stm.setString(2, getNome()); stm.setString(3, getFone()); stm.execute(); //
// Inclusao dos PEDIDOS do cliente //
int i = 0;
while (i < listaDePedidos.size()) {
Pedido p = (Pedido) listaDePedidos.get(i); p.incluir(getIdCliente(), conn); i++; } } catch (Exception e) { e.printStackTrace(); try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } finally { if (stm != null) { try { stm.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } }
public void excluir(Connection conn) {
String sqlDelete = "DELETE FROM cliente WHERE id = ?"; PreparedStatement stm = null; try { int i = 0; while (i < listaDePedidos.size()) {
Pedido p = (Pedido) listaDePedidos.get(i); p.excluir(conn); i++; } stm = conn.prepareStatement(sqlDelete); stm.setInt(1, getIdCliente()); stm.execute(); } catch (Exception e) { e.printStackTrace(); try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } finally { if (stm != null) { try { stm.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } }
public void carregar(Connection conn) {
String sqlSelect = "SELECT * FROM cliente WHERE cliente.id = ?"; PreparedStatement stm = null; ResultSet rs = null; try { stm = conn.prepareStatement(sqlSelect); stm.setInt(1, getIdCliente()); rs = stm.executeQuery(); if (rs.next()) { this.setNome(rs.getString(2)); this.setFone(rs.getString(3));
Pedido p = new Pedido();
this.setListaDePedidos(p.carregar(idCliente, conn)); }
catch (Exception e) { e.printStackTrace(); try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } finally { if (stm != null) { try { stm.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } } } Classe “Pedido.java” import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import java.util.ArrayList;
public class Pedido {
private int idPedido; private Date data; private Double valor;
public Pedido() {
}
public Pedido(int idPedido, Date data, Double valor) {
this.idPedido = idPedido; this.data = data;
this.valor = valor; }
public int getIdPedido() {
return idPedido; }
public void setIdPedido (int idPedido) {
this.idPedido = idPedido; }
public Date getData() {
return data; }
public void setData(Date data) {
this.data = data; }
public Double getValor() {
return valor; }
public void setValor(Double valor) {
this.valor = valor; }
/**
* Inclusao de pedidos */
public void incluir(int idCliente, Connection conn) {
String sqlInsert = "INSERT INTO pedido(id, data, valor, id_cliente) VALUES (?, ?, ?, ?)"; PreparedStatement stm = null; try { stm = conn.prepareStatement(sqlInsert); stm.setInt(1, getIdPedido());
stm.setDate(2, new java.sql.Date(getData().getTime())); stm.setDouble(3, getValor()); stm.setInt(4, idCliente); stm.execute(); } catch (Exception e) { e.printStackTrace(); try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } finally { if (stm != null) { try { stm.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } }
public void excluir(Connection conn) {
String sqlDelete = "DELETE FROM pedido WHERE id = ?"; PreparedStatement stm = null; try { stm = conn.prepareStatement(sqlDelete); stm.setLong(1, getIdPedido()); stm.execute(); }
catch (Exception e) { e.printStackTrace(); try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } finally { if (stm != null) { try { stm.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } }
public ArrayList<Pedido> carregar(int idCliente, Connection conn) {
String sqlSelect = "SELECT * FROM pedido WHERE id_cliente = ?";
PreparedStatement stm = null; ResultSet rs = null;
ArrayList<Pedido> lp = new ArrayList<Pedido>(); try { stm = conn.prepareStatement(sqlSelect); stm.setInt(1, idCliente); rs = stm.executeQuery(); while (rs.next()) {
Pedido p = new Pedido(); p.setIdPedido(rs.getInt(1)); p.setData(rs.getDate(2)); p.setValor(rs.getDouble(3)); lp.add(p); } } catch (Exception e) { e.printStackTrace(); try { conn.rollback(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } finally { if (stm != null) { try { stm.close(); }
catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } return (lp); } }