• Nenhum resultado encontrado

USJT-2016-CCO&SI-PPINT-Aula12-Acesso ao MySQL com Java

N/A
N/A
Protected

Academic year: 2021

Share "USJT-2016-CCO&SI-PPINT-Aula12-Acesso ao MySQL com Java"

Copied!
11
0
0

Texto

(1)

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.

(2)

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.

(3)

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);

(4)

// *** 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); }

(5)

// --- // 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; }

(6)

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()); } } } }

(7)

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)); }

(8)

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; }

(9)

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(); }

(10)

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(); }

(11)

catch (SQLException e1) { System.out.print(e1.getStackTrace()); } } } return (lp); } }

Referências

Documentos relacionados

Alguns aspectos comparativos entre hemoglobinas de duas espécies de peixes do rio Amazonas foram aná- lisadas, com a finalidade de estabelecer as bases

A ação de restauro, ademais, e pela mesma exigência que impõe o respeito da complexa historicidade que compete à obra de arte, não se deverá colocar como secreta e quase fora

O indicador 6.1 (Organização do espaço e recursos materiais) obteve a terceira maior frequência total de estratégias (45). Entre as estratégias que mais apareceram

Considerando o objetivo geral do artigo, ou seja, verificar a possibilidade de incrementar melhorias no fluxo informacional entre os setores Comercial e de Planejamento e Controle

Porém, a ABNT NBR 6118 (2014) passou a propor os limites nos valores das regiões nodais para o dimensionamento desses elementos estruturais. Essas indicações normativas

Os serviços da camionagem no Grande Porto Partindo agora de uma leitura de conjunto, na qual separamos os concessionários das empresas privadas segundo o tipo de serviço que presta

as quais discorremos no corpo deste texto, são: (a) a brincadeira de Capryynre, que chamamos em português de brincadeira de jabuti; (b) a brincadeira de A’cruu’te, que recebeu o

Entretanto, uma observação mais detalhada da Figura 5.6, referente ao laminado PPS-C, já permite verificar claramente, para os dois modos de aquecimento dos laminados, a presença