Aprenda Java com Banco de Dados

  • Página Inicial
  • Contato!
  • Tudo sobre Java com Banco de Dados Parte 1!
  • Tudo sobre Java com Banco de Dados Parte 2!
  • Tudo sobre Java com Banco de Dados Parte 3!
  • Tudo sobre Java com Banco de Dados Parte 4!
  • Tudo sobre Java com Banco de Dados Parte 5!
  • Tudo sobre Java com Banco de Dados Parte 6!
  • Tudo sobre Java com Banco de Dados Parte 7!
  • Tudo sobre Java com Banco de Dados Parte 1

    Criando Conexão

    Para criarmos uma conexão, crie uma nova aplicação Java, sem classe principal. E nas bibliotecas, entre com o botão direito e adicione a biblioteca do Driver JDBC do MYSQL, que é um jar baixado daqui: http://www.java2s.com/Code/Jar/c/Downloadcommysqljdbc515jar.htm

    Crie também um pacote com o nome connection e dentro dela, uma classe com o nome ConnectionFactory.

    Esse é o código básico da classe:

    
    package connection;
    
    public class ConnectionFactory {
        private static final String DRIVER = "com.mysql.jdbc";
        private static final String URL = "jdbc:mysql://localhost:3306/dbloja";
        private static final String USER = "root";
        private static final String PASS = "";   
    }
    
    

    Na parte DRIVER, você coloca o nome do local que estiver a classe DRIVER, no caso, com.mysql.jdbc, dentro da biblioteca de Driver Mysql.

    Na parte URL, você coloca a porta do MYSQL e o nome do banco. Atenção pra documentação do tipo de banco de dados, já que acada um usa um nome de conexão diferente, no caso, usamos jdbc:mysql

    Nas partes USER e PASS, login e senha do banco.

    PS: Caso use o PostgreSQL, importe a biblioteca do Driver JDBC do PostgreSQL (geralmente já incluída no Netbeans, mas também pode ser baixada aqui: https://jdbc.postgresql.org/download/), e coloque o código assim:

    
    private static final String DRIVER = "org.postgresql.jdbc";
    private static final String URL = "jdbc:postgresql://localhost:5432/dbloja";
    private static final String USER = "postgres";
    private static final String PASS = "admin"; // A senha configurada
    
    

    E no caso do SQLite, coloque a biblioteca jar baixando ela aqui: https://github.com/xerial/sqlite-jdbc/releases, e coloque o código assim:

    
    private static final String DRIVER = "org.sqlite.jdbc";
    private static final String URL = "jdbc:sqlite:dbloja.db3"; // Pode estar numa pasta também
    
    

    Para criarmos a conexão, temos que usar um método que pegará essa conexão, da classe Connection (deverá importar java.sql.Connection, tudo será usado do sql, preste atenção). Esse será o código básico:

    
    public class ConnectionFactory {
        private static final String DRIVER = "com.mysql.jdbc";
        private static final String URL = "jdbc:mysql://localhost:3306/dbloja";
        private static final String USER = "root";
        private static final String PASS = "";
        
        public static Connection getConnection() { // Importar java.sql 
            Class.forName(DRIVER);
        }
    }
    
    

    O código completo do getConnection fica assim:

    
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(URL, USER, PASS); // Não deixe o Class.forName aqui, tirar USER e PASS caso use SQLite. Importar java.sql
        }
        catch(SQLException ex) { // Importar java.sql
            throw new RuntimeException(ex);
        }
    }
    
    

    Agora, criaremos abaixo, um método void para fechar a conexão, na verdade, serão três, com sobrecarga e invocação de outros métodos, veja o primeiro abaixo:

    
    public static void closeConnection(Connection con) {
        if(con != null) {
            try {
                con.close();
            }
            catch(SQLException ex) {
                System.err.println("ERRO: " + ex.getMessage()); // Esse imprime em vermelho!
            }
        }
    }
    
    

    Esse é o código completo da classe:

    
    package connection;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    // Isso define os dados pra conexão:
    
    public class ConnectionFactory {
        private static final String DRIVER = "com.mysql.jdbc";
        private static final String URL = "jdbc:mysql://localhost:3306/dbloja";
        private static final String USER = "root";
        private static final String PASS = "";
        
        // Isso cria a conexão:
        
        public static Connection getConnection() { // Importar java.sql.Connection
            try {
                return DriverManager.getConnection(URL, USER, PASS); // Importar
            }
            catch(SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
        
        // Isso fecha a conexão:
        
        public static void closeConnection(Connection con) {
            if(con != null) {
                try {
                    con.close();
                }
                catch(SQLException ex) {
                    System.err.println("ERRO: " + ex.getMessage()); // Esse imprime em vermelho!
                }
            }
        }
        
        public static void closeConnection(Connection con, PreparedStatement stmt) { // Importar java.sql.PreparedStatement
            if(stmt != null) {
                try {
                    stmt.close();
                }
                catch(SQLException ex) {
                    System.err.println("ERRO: " + ex.getMessage());
                }
            }
            
            closeConnection(con); // Invocação do primeiro método, que fecha a tal conexão.
        }
        
        public static void closeConnection(Connection con, PreparedStatement stmt, ResultSet rs) { // Importar java.sql.ResultSet
            if(rs != null) {
                try {
                    rs.close();
                }
                catch(SQLException ex) {
                    System.err.println("ERRO: " + ex.getMessage());
                }
            }
            
            closeConnection(con, stmt); // Invocação do segundo método, que fecha a tal conexão.  
        }   
    }
    
    

    PS: Ao compilar um programa Java com Banco de Dados, assegure-se que a pasta lib estará junta dentro da pasta do arquivo executável Java, já que dentro da lib tem as bibliotecas jar que farão a conexão com o banco de dados. Uma mesma biblioteca de uma pasta lib pode ser compartilhada com inúmeros aplicativos, desde que utilizem o mesmo tipo de banco de dados e estejam no caminho certo. Verifique se a sintaxe Java 8 está selecionada, mesmo se estiver usando um JDK superior.

    Criando Bean com Composição

    Para essa parte, crie um pacote denominado model.bean, e nela crie uma classe com o nome Categoria, com esse código:

    
    package model.bean;
    
    public class Categoria {
        private int id;
        private String descricao;
    
        // Ambos os categorias são construtores, com sobrecarga:
        
        public Categoria() {
            
        }
        
        public Categoria(String descricao) {
            this.descricao = descricao;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getDescricao() {
            return descricao;
        }
    
        public void setDescricao(String descricao) {
            this.descricao = descricao;
        } 
    }
    
    

    No mesmo pacote, crie a classe produto, com esse código:

    
    package model.bean;
    
    public class Produto {
        private int id;
        private String descricao;
        private int qtd;
        private double valor;
        private Categoria cate;
        
        // Também tem sobrecarga nos construtores:
        
        public Produto() {
            
        }
        
        public Produto(String descricao, int qtd, double valor, Categoria cate) {
            this.descricao = descricao;
            this.qtd = qtd;
            this.valor = valor;
            this.cate = cate;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getDescricao() {
            return descricao;
        }
    
        public void setDescricao(String descricao) {
            this.descricao = descricao;
        }
    
        public int getQtd() {
            return qtd;
        }
    
        public void setQtd(int qtd) {
            this.qtd = qtd;
        }
    
        public double getValor() {
            return valor;
        }
    
        public void setValor(double valor) {
            this.valor = valor;
        }
    
        public Categoria getCate() {
            return cate;
        }
    
        public void setCate(Categoria cate) {
            this.cate = cate;
        }
    }
    
    

    Criando DAO - Inserir

    Crie um novo pacote denominado model.dao, e uma classe com o nome CategoriaDAO.

    Basicamente, seria isso:

    
    package model.dao;
    
    import connection.ConnectionFactory;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import model.bean.Categoria;
    
    public class CategoriaDAO {
        private Connection con = null; // Importar
        
        public CategoriaDAO() {
            con = ConnectionFactory.getConnection(); // Isso faz a conexão, importe connection.ConnectionFactory
        }
        
        public boolean save(Categoria cate) { // Importar model.bean.Categoria
            String sql = "insert into categoria (descricao) values (?)";
            
            PreparedStatement stmt = null; // Importar;.
            
            stmt = con.prepareStatement(sql); // Circundar com try catch
        }
    }
    
    

    Esse é o código completo:

    
    package model.dao;
    
    import connection.ConnectionFactory;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import model.bean.Categoria;
    
    public class CategoriaDAO {
        private Connection con = null; // Importar
        
        public CategoriaDAO() throws SQLException {
            con = ConnectionFactory.getConnection(); // Isso faz a conexão, importe connection.ConnectionFactory
        }
        
        public boolean save(Categoria cate) { // Importar model.bean.Categoria
            String sql = "insert into categoria (descricao) values (?)";
            
            PreparedStatement stmt = null; // Importar.
            
            try {
                stmt = con.prepareStatement(sql);
                stmt.setString(1, cate.getDescricao());
                stmt.executeUpdate(); // Isso é responsável pelo insert, update e delete no banco.
            
                return true;
            }
            catch(SQLException ex) {
                System.err.println("Erro: " + ex);
                
                return false;
            }
            finally { // Isso fecha a conexão
                ConnectionFactory.closeConnection(con, stmt);
            }
        }
    }
    
    

    PS: Nos comandos SQL do Java, o conteúdo a ser inserido no banco é representado pelo ponto de interrogação. Isso são consultas preparadas, para prevenir SQL Injection.