Ir ao conteúdo
  • Cadastre-se

CRUD em jdbc, métodos não funcionam ao serem executados


v1c2rr

Posts recomendados

Boa noite pessoal, estou com uma dúvida aqui,
Criei 3 classes sendo uma vou, uma dao e a classe de conexão no banco + o banco com 2 campos (id e nome da pessoa) porém ao executar o método principal e verificar a tabela não consegui inserir os dados. Tenho um projeto para entregar até amanhã na faculdade, esse é só um código que estou testando para depois efetuar as mudanças de acordo com esse projeto e implementar o RMI nele.

 

package br.edu.naifcode.dao;
import br.edu.naifcode.dto.PessoaDTO;
import br.edu.naifcode.jdbc.Conection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author Victor
 */
public class PessoaDAO {
    public void inserir(PessoaDTO pessoaDTO) {
        try {
          Connection connection = Conection.getInstance().getConnection();
          String sql = "INSERT INTO pessoa (nome) VALUES(?)";
          PreparedStatement statement = connection.prepareStatement(sql);        
          statement.setString(1, pessoaDTO.getNome());
          statement.execute();
          connection.close();
          System.out.println("Usuario inserido com sucesso!!");
          }  catch (Exception e){
               e.printStackTrace();
          }
    }
    public void excluir (int id_pessoa){
      try {
          Connection connection = Conection.getInstance().getConnection();
          String sql = "DELETE FROM pessoa WHERE id_pessoa = ?";
          PreparedStatement statement = connection.prepareStatement(sql);
          statement.setInt(1, id_pessoa);
          statement.execute();
          statement.close();
      } catch (Exception e){
        e.printStackTrace();
      }   
    }
    public void atualizar(PessoaDTO pessoaDTO){
       try{
          Connection connection = Conection.getInstance().getConnection();
          String sql = "UPDATE pessoa SET nome = ? WHERE id_pessoa = ?";
          PreparedStatement statement = connection.prepareStatement(sql);
          statement.setString(1, pessoaDTO.getNome());
          statement.setInt(2, pessoaDTO.getId_pessoa());     
          statement.execute();
          statement.close();
          } catch(Exception e){
               e.printStackTrace();
          } 
    }    
    public List<PessoaDTO> listarTodos(){
        List<PessoaDTO> listaPessoas = new ArrayList<PessoaDTO>();
        try{
           Connection connection = Conection.getInstance().getConnection();
           String sql = "SELECT * FROM pessoa";
           //realiza a ponte e executa o script acima no bd
           PreparedStatement statement = connection.prepareStatement(sql);
           //vem com a tabela do bd e armazena os dados da tabela do banco no resultset
           ResultSet resultset = statement.executeQuery();
           //enquanto houver linha, serão colocados dados na lista
           while(resultset.next()){
              PessoaDTO pessoaDTO = new PessoaDTO();
              pessoaDTO.setId_pessoa(resultset.getInt("id_pessoa"));
              pessoaDTO.setNome(resultset.getString("nome"));
              listaPessoas.add(pessoaDTO);
           }
           connection.close();
        } catch (Exception e){
           e.printStackTrace();
        }
        return listaPessoas;
    }
     public static void main ( String[] args ) { 
        PessoaDTO pessoaDTO = new PessoaDTO();
        pessoaDTO.setNome("Alvaro");
        PessoaDAO pessoaDAO = new PessoaDAO();
        pessoaDAO.inserir(pessoaDTO);      
     }    
}



package br.edu.naifcode.dto;
/**
 *
 * @author Victor
 */
public class PessoaDTO {
    private int id_pessoa;
    private String nome;
    public PessoaDTO() {
    }
    public PessoaDTO(int id_pessoa, String nome) {
        this.id_pessoa = id_pessoa;
        this.nome = nome;
    }
    /**
     * @return the id_pessoa
     */
    public int getId_pessoa() {
        return id_pessoa;
    }
    /**
     * @param id_pessoa the id_pessoa to set
     */
    public void setId_pessoa(int id_pessoa) {
        this.id_pessoa = id_pessoa;
    }
    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }
    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }   
}


package br.edu.naifcode.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Victor
 */
public class Conection {
    private static Conection conection;
    public static Conection getInstance() {
       if (conection == null) {
           conection = new Conection(); 
       }
       return conection;
    }
    public Connection getConnection() throws ClassNotFoundException, SQLException{
       Class.forName("com.mysql.jdbc.Driver");
       return DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
    }
    public static void main ( String [] args ){
        try {
            System.out.println(getInstance().getConnection());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }   
}

Banco :test

CREATE TABLE IF NOT EXISTS `pessoa` (
  `id_pessoa` int(2) NOT NULL,
  `nome` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `pessoa`
--
ALTER TABLE `pessoa`
  ADD PRIMARY KEY (`id_pessoa`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `pessoa`
--
ALTER TABLE `pessoa`
  MODIFY `id_pessoa` int(2) NOT NULL AUTO_INCREMENT;

 


Espero que alguém me ajude, só preciso de uma dica sobre o está errado no código que não está inserindo dados no banco.

Valeu!

Link para o comentário
Compartilhar em outros sites

eu uso JPA a séculos, então estou bastante esquecido com a estrutura JDBC assim, 

 

faça alguns testes 

 

1º - mas tente colocar aspas simples no seu parametro de insert: 

String sql = "INSERT INTO pessoa (nome) VALUES('?')";

 

2° - teste algo assim, em modo DEBUG veja como ele está criando a variável "sql", copie ela e cole no seu SGBD e tente fazer o Insert subistituindo o '?' por qquer valor e veja se dá certo.

 

3º - Finalmente quando insira algo no banco, teste os outros métodos, (modificar e excluir). caso exclua e modifique significa q sua conexão com o banco está satisfatória.

Link para o comentário
Compartilhar em outros sites

Leandronik, valeu pela dica!! Então, eu coloquei as aspas simples naquele script do insert e fiz outra correção para ver se funcionava acrescentando um mais entre "insert into" e "values": String sql = "INSERT INTO pessoa (nome)" + " VALUES('?')"; . O debug quando executei ele deu aquela mesma saída no console e não inseriu aqueles dados que coloquei no fim da classe DAO.

Rio: commit nunca usei, como ele ficaria nessa função insert()?!
        

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Você ja debugo colocando o código direto no sql?

Insert into pessoa (id_pessoa,nome) values ("","teste");

 

cara e quando eu fiz curso de programação eu usava um programa chamado  MySQL Workbench (não sei diminuir a letra) e é muito pratico para a criação de banco.(não sei se você ja usa mas recomendo).

String sql = "INSERT INTO pessoa (nome) VALUES(?)";
Link para o comentário
Compartilhar em outros sites

Cheguei, estava testando aqui de novo o código

Leandronik = Por enquanto só tentei testar o insert na função da dao, vou tentar inserir manualmente e testar esses outros métodos alterar, e excluir também!

Snack169 = Vou colocar esse código ai direto no sql e rodar ele por lá agora para verificar,  ah, esse MySQL Workbench já usei ele para criar banco, mas ainda não testei ele nos códigos SQL.

Acabei de testar agora, fiz os comandos inserir manualmente no próprio phpmyadmin na opção SQL e tentei excluir e alterar eles, porém nada feito

Link para o comentário
Compartilhar em outros sites

@Victorbg cara, tenho uma noticia muito ruim para você kkkkk
COnstrui seu projeto aqui, suas classes e instalei o mySql. 

Meu ambiente está praticamente igual o seu.

 

Executei sua classe pessoaDAO e tenho uma noticia.
Funcionou aqui.

você já fez a consulta select * from pessoa para verificar?

 

Por favor, verificar console se realmente nenhuma mensagem está sendo lançada de exceção e fazer uma consulta na sua tabela para realmente confirmar se os dados não estão sendo inseridos.
Lembrar de apontar para o banco test, seu código está correto e está inserindo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Nossa Rio kkkkkkk aleluiiaaa e eu aqui tenso que esses códigos não estão funcionando olha eu lol não sei porque diabos não estou conseguindo. Mas você conseguiu inserir dados a partir dessa classe pessoaDAO né?! que aqui não estou saindo nem com reza brava lol quando dou o executar no netbeans e atualizo o phpmyadmin ele não faz nada =/ 

Link para o comentário
Compartilhar em outros sites

@Victorbg Porque você está utilizando o  phpmyadmin  ? porque não vai direto no banco mesmo? 
Que tal você agora fazer um método pra consultar os dados e retornar?
Tenho certeza que você está inserindo, só não ta sabendo visualizar.

Vou lhe ajudar mais, substitui o método main por este que vou lhe enviar.

 

 public static void main ( String[] args ) { 
        /*PessoaDTO pessoaDTO = new PessoaDTO();
        pessoaDTO.setNome("Arthur Rio");
        PessoaDAO pessoaDAO = new PessoaDAO();
        pessoaDAO.inserir(pessoaDTO);*/
    	 PessoaDAO pessoaDAO = new PessoaDAO();
    	List<PessoaDTO> lista =  pessoaDAO.listarTodos();
    	 
    	 for(PessoaDTO p : lista){
    		 
    		 System.out.println(p.getId_pessoa()+" " + p.getNome());
    		 
    	 }
    	 
    	 
     }    

 

Link para o comentário
Compartilhar em outros sites

E ai galera eu consegui fazer ele aqui!! Tinha descoberto o que tava dando errado que toda vez que eu inseria ele não caia no banco. Fui com o botão direito em projeto > propriedades > dai ele estava como jdk 8 então mudei para jdk 6 e alterei umas configurações internas no xampp! valeuu galera :D 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!